【发布时间】:2021-08-02 08:51:03
【问题描述】:
据我了解,python 3.9 中的 ZoneInfo 解决了 DST 时间问题的“2038 年”问题。但我可以看到timedelta 是错误的。下面应该是 2 小时,而不是 3 小时。出了什么问题?
from zoneinfo import ZoneInfo
import datetime
dt = datetime.datetime(2038,3,14,0,0, tzinfo = ZoneInfo(r'America/New_York'))
print(dt)
dt2 = datetime.datetime(2038,3,14,3,0, tzinfo = ZoneInfo(r'America/New_York'))
print(dt2-dt)
【问题讨论】:
-
timedeltas 在 Python 中显示 墙时差,如果您正在使用感知日期时间。在您的示例日期时间之间,虽然绝对时差只有两个小时(DST 转换),但墙壁时差为三个小时。更多解释可以在 Paul Ganssle 的this blog article 中找到。顺便提一句。这不是特定于 2k38 问题(完全不同的故事,请参阅 int32...) -
如何获得绝对时差而不是墙壁时差?
-
我会转换为 UTC;
print(dt2.astimezone(ZoneInfo('UTC')) - dt.astimezone(ZoneInfo('UTC')))(我认为最清晰/可读的选项)。 -
你能把你的评论作为答案让我接受吗?
标签: python datetime timezone zoneinfo