我对以下代码的输出感到困惑:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
import pytz
local_time = datetime.datetime.now(pytz.timezone('Europe/Berlin'))
utc_time = datetime.datetime.now(datetime.timezone.utc)
print(local_time - utc_time)
我认为时区只是一个偏移(取决于日期和DST的位置等因素以及随时间变化的定义......所以不是那么简单,但仍然是偏移)。所以我认为一个时区感知的日期时间就是:
utc_time == '12:34'
+ timezone is Europe/Berlin in UTC 2018-01-01 at 12:34
=> local time = (utc + local timezone) = 2018-01-01 at 13:34
然后我想,两个日期时间对象之间的差异应该等于同一时间点与UTC的差异(不考虑时区的思想构造)。
因此,如果我执行" datetime.now"在(大约)相同的时间点和"分配"它到不同的时区,差异应该是在两个命令之间传递的毫秒数。
但它实际上是-1 day, 23:59:59.999982
。
答案 0 :(得分:0)
找到它;这只是一个代表问题:
>>> print(local_time)
2018-03-13 14:01:14.973876+01:00
>>> print(utc_time)
2018-03-13 13:01:14.973899+00:00
>>> print(utc_time - local_time)
0:00:00.000023
>>> print(local_time - utc_time)
-1 day, 23:59:59.999977
>>> print((local_time - utc_time).total_seconds())
-2.3e-05
所以它是-1天+ 23:59:59.999977