如何在Python中获取给定时区的日间夏令时更改?

时间:2017-11-09 00:20:00

标签: python timezone

我想知道夏令时变化发生的日子,以便我可以判断某个日期时间是否在夏令时变化后不久。知道时间是向前还是向后移动的奖励。

最终这样的事情就足够了:

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)

2 个答案:

答案 0 :(得分:1)

您似乎正在寻找_utc_transition_times

from pytz import timezone
tz = timezone('US/Eastern')
print(tz._utc_transition_times)

将打印更改发生的日期时间列表。

答案 1 :(得分:0)

我能够找到一个有效的解决方案。

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)