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

问题描述 投票:0回答:3

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

最后像这样就足够了:

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)
python timezone
3个回答
1
投票

看来您正在寻找

_utc_transition_times

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

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


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)

0
投票

我注意到变化的日子每六年重复一次,所以 % 6 可能有助于获得答案。 对于英国:

march_dict = {1: 26, 0: 27, 5: 28, 4: 29, 3: 30, 2: 31}
october_dict = {5: 31, 0: 30, 1: 29, 4: 25, 2: 27, 26: 3}

英国的变化只发生在三月和十月,所以我们只需要一天。 夏令时从三月开始

march_dict[current_year % 6] th/st
冬季时间从十月开始
october_dict[current_year % 6] th/st

© www.soinside.com 2019 - 2024. All rights reserved.