夏令时于 2021 年 3 月 14 日凌晨 2 点开始。
使用 Python zoneinfo
创建时区感知日期时间,如下所示:
import zoneinfo
from datetime import datetime
tz = zoneinfo.ZoneInfo("US/Eastern")
d0 = datetime(2021, 3, 13, 23, tzinfo=tz)
d1 = datetime(2021, 3, 14, 7, tzinfo=tz)
print(d0, d1, (d1 - d0).total_seconds() / 60 / 60)
我收到输出:
2021-03-13 23:00:00-05:00 2021-03-14 07:00:00-04:00 8.0
Python 正确地“看到”了这些值之间的 UTC 偏移量转换(-5 与 -4),但为什么生成的时间增量等于 8 而不是 7?
就其值(value)而言,按如下方式创建时区感知日期时间会产生完全相同的结果:
d0 = datetime(2021, 3, 13, 23).replace(tzinfo=tz)
d1 = datetime(2021, 3, 14, 7).replace(tzinfo=tz)
最佳答案
感谢对我原来问题的讨论以及我从 blog post by Paul Ganssle 中获得的理解,我将我的 timedelta.total_seconds()
数学替换为:
d1.timestamp() - d0.timestamp()
这给出了我所追求的正确的“实际”时间跨度值。
关于Python timedelta 跨越 DST 转换返回不正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71428364/