【发布时间】:2021-10-18 19:58:20
【问题描述】:
我一直在阅读 pytz 和 datetime 模块文档,但我无法弄清楚为什么一个日期在 DST 之下而另一个不在。
import pytz
import datetime
mytz = pytz.timezone('America/New_York')
od = datetime.datetime(2021, 7, 1, 4, 0)
mytz.localize(od)
# Out: datetime.datetime(2021, 7, 1, 4, 0, tzinfo=<DstTzInfo 'America/New_York' EDT-1 day, 20:00:00 DST>)
mytz.localize(od).dst()
# Out: datetime.timedelta(0, 3600)
dt = datetime.datetime(2089, 7, 1, 4, 0)
mytz.localize(dt)
# Out: datetime.datetime(2089, 7, 1, 4, 0, tzinfo=<DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>)
mytz.localize(dt).dst()
# Out: datetime.timedelta(0)
【问题讨论】:
-
今天没有人知道 2089 年的日期是否是夏令时。所以,这里甚至没有一个正确的答案。对 pytz 来说,继续今天的规则是有意义的,除非它知道它即将被废除。但是,答案是什么也同样有意义。为什么 DST 规则似乎“过期”了……有人必须深入挖掘。
-
@deceze 好的,但是 2088 年呢,你说的是真的吗,2087 年呢,……直到 2022 年,为什么更确定?假设 DST 规则未知,pytz 放弃哪一年(根据您的说法)?反正pytz github上有这个小问题; 2038 年之后的日期目前给出错误的 DST github.com/stub42/pytz/issues/31
标签: python datetime python-datetime pytz