为什么两个datetime.now()对象的差异不接近0?

时间:2018-03-13 12:56:38

标签: datetime timezone

我对以下代码的输出感到困惑:

#!/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

1 个答案:

答案 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