获取Python中给定时区的夏令时边界

14 投票
1 回答
4380 浏览
提问于 2025-04-17 01:59

用pytz这个库,能不能获取某个时区的夏令时边界呢?

1 个回答

21

这似乎并没有官方支持。不过,你可以深入研究一下 DstTzInfo 对象的内部结构,从中获取你需要的信息:

>>> from pytz import timezone
>>> tz = timezone('Europe/London')
>>> tz._utc_transition_times
[datetime.datetime(1, 1, 1, 0, 0), datetime.datetime(1916, 5, 21, 2, 0),
...
datetime.datetime(2036, 3, 30, 1, 0), datetime.datetime(2036, 10, 26, 1, 0),
datetime.datetime(2037, 3, 29, 1, 0), datetime.datetime(2037, 10, 25, 1, 0)]

每个条目对应于 _transition_info 中的一个条目:

>>> tz._transition_info
[(datetime.timedelta(0), datetime.timedelta(0), 'GMT'),
(datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
...
(datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
(datetime.timedelta(0), datetime.timedelta(0), 'GMT'),
(datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
(datetime.timedelta(0), datetime.timedelta(0), 'GMT')]

而来源告诉我们这些条目的含义:

_utc_transition_times = None # Sorted list of DST transition times in UTC
_transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding
                        # to _utc_transition_times entries

当然,这个方法依赖于具体的实现,你可能希望依赖于已知有效的特定版本的 pytz。

撰写回答