在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 中获取时区?
如何确定给定时区中的给定时间是不是在postgresql中是DST?