我想知道夏令时更改发生的日期,以便我可以判断某个日期时间是否在夏令时更改后不久。知道时间是向前移动还是向后移动的奖励。
最后,这样的事情就足够了:
import pytz
import datetime
def days_after_tz_change(dt):
"""returns a timedelta"""
tz = pytz.timezone('US/Eastern')
# dst changes on November 5
dt = tz.localize(datetime.datetime(2017, 11, 8))
days_after_tz_change(dt) # timedelta(days=3)
看来你正在寻找_utc_transition_times
from pytz import timezone
tz = timezone('US/Eastern')
print(tz._utc_transition_times)
将打印发生更改的日期时间列表。
我能够得到一个可行的解决方案。
import pytz
import datetime
from bisect import bisect
def days_after_tz_change(dt):
"""returns a timedelta"""
transitions = dt.tzinfo._utc_transition_times
utc_time = dt.astimezone(pytz.UTC).replace(tzinfo=None)
index = bisect(transitions, utc_time) - 1
return dt - pytz.UTC.localize(transitions[index])
tz = pytz.timezone('US/Eastern')
# dst changes on November 5
dt = tz.localize(datetime.datetime(2017, 11, 8))
days_after_tz_change(dt) # datetime.timedelta(2, 82800)