如何在Python中确定特定位置的夏令时开始或结束时间?
我想找一种方法,来确定某个时区的夏令时(DST)什么时候开始或结束,这个是在我正在做的Python脚本里需要用到的。
我知道pytz可以把我正在处理的UTC时间转换成当地时间,并且会考虑夏令时的影响,但对于这个特定的应用,我需要知道具体的切换时间。
有没有什么建议呢?
1 个回答
26
你可以查看一下你正在使用的时区的 _utc_transition_times
这个成员。
>>> from pytz import timezone
>>> tz = timezone("Europe/Paris")
>>> print tz._utc_transition_times
[datetime.datetime(1, 1, 1, 0, 0), datetime.datetime(1911, 3, 10, 23, 51, 39), datetime.datetime(1916, 6, 14, 23, 0), datetime.datetime(1916, 10, 1, 23, 0), date
....
datetime.datetime(2037, 3, 29, 1, 0), datetime.datetime(2037, 10, 25, 1, 0)]
它会给你提供夏令时变化的日期列表(夏令时的开始和结束时间)。
根据 tzinfo.py 里的代码
class DstTzInfo(BaseTzInfo):
'''A timezone that has a variable offset from UTC
The offset might change if daylight savings time comes into effect,
or at a point in history when the region decides to change their
timezone definition.
'''
# Overridden in subclass
_utc_transition_times = None # Sorted list of DST transition times in UTC
_transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding
# to _utc_transition_times entries
所以如果你把 _utc_transition_times
和 _transition_info
混合在一起,你就能获取到所有你需要的信息,包括日期、时间和时差;)