在python中获取给定时区的DST边界

Posted

技术标签:

【中文标题】在python中获取给定时区的DST边界【英文标题】:get the DST boundaries of a given timezone in python 【发布时间】:2011-11-14 11:04:52 【问题描述】:

是否可以使用 pytz 获取给定时区的 DST 边界?

【问题讨论】:

【参考方案1】:

似乎没有官方支持。但是,您可以戳 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 版本。

【讨论】:

不确定最后一句话是什么意思。 Pytz 有其他类似的修改,但实际上是否有不同的实现? 谁知道?您正在访问以下划线开头的字段,这不是文档化 API 的一部分。 pytz 作者可能随时更改它。 现在核心 Python 中有实现吗? 看起来不像。 python 3.9 有zoneinfo,大致相当于 pytz ——但是这个技巧对它不起作用:)

以上是关于在python中获取给定时区的DST边界的主要内容,如果未能解决你的问题,请参考以下文章

给定 UTC 时间戳和 UTC 偏移量,是不是可以在 Python 中获取时区?

在python中获取下一次DST更改的时间

如何确定给定时区中的给定时间是不是在postgresql中是DST?

确定 DST 是不是对给定 time_t 的指定时区有效

C++ timegm 将 DST 转换为将来给定时间的某个时区?

使用 pytz 时区时 Python 日期时间不包括 DST