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



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

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

找到了;这只是一个表示问题:

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

最新更新