tzinfo 为 None 时的 Python datetime DST

Python datetime DST when tzinfo is None

提问人:Isidro Arias 提问时间:9/7/2023 最后编辑:FObersteinerIsidro Arias 更新时间:9/7/2023 访问量:50

问:

在 3 月的最后一个星期日调用该方法返回:timestamp

>>> import datetime
>>> before = datetime.fromisoformat("2023-03-26 02:00:01")
>>> after = datetime.fromisoformat("2023-03-26 03:00:01")
>>> print(before.tzinfo)
None
>>> print(after.tzinfo)
None
>>> after.timestamp() - before.timestamp()
0.0

即使相隔一个小时,它们也是相等的。我原以为当 tzinfo 是None

同时,当使用减法运算符时,它会捕捉到差异

>>> after - before
datetime.timedelta(seconds=3600)
python datetime timedelta dst tzinfo

评论

0赞 FObersteiner 9/7/2023
请注意这里的另一个“专业”:“2023-03-26 02:00:01”甚至不存在,如果你在那个日期有夏令时过渡!时钟从凌晨 1:59 直接变为凌晨 3:00(DST 非活动到活动)。尽管如此,该方法就像有过渡一样播放它?!...timestamp()

答:

2赞 Anentropic 9/7/2023 #1

https://docs.python.org/3/library/datetime.html#datetime.datetime.timestamp

假设 Naive 实例表示本地时间,此方法依赖于平台 C mktime() 函数来执行转换。datetime

“naïve”表示没有 tzinfo,因此该方法隐式地将它们视为本地时间,因此您看到的差异为零。timestamp

同时,日期数学将它们视为没有时区的抽象日期时间,因此生成的时间增量不考虑 DST。after - before