2011-09-29 56 views
11

我正在寻找一种方法来确定DST何时开始或结束在我正在处理的Python脚本中的给定时区。如何确定DST何时在Python中的特定位置开始或结束?

我知道pytz可以将我工作的UTC日期转换为本地时间,并将DST考虑在内,但对于此特定应用程序,我需要知道转换的重点。

有什么建议吗?

+2

对于哪一年? DST变化点在某些时区的历史中发生了变化。 – eumiro

+0

那么,理想情况下,我希望能够在任意一年做到这一点。我知道奥尔森数据库中有这种信息,但访问它是另一回事。 – Smingos

回答

14

你可以看看你正在使用的时区的_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)] 

它会给你DST更改日期列表(DST的开始和结束)。

根据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你会抓住你所有需要的信息,日期,时间和偏移申请;)

+0

这看起来非常好。不知道这个属性。 – eumiro

+0

我一回家就试试,谢谢。那些日期标志着DST的开始还是结束? – Smingos

+0

欧洲/巴黎DST的开始大部分是在3月份,其结束时间是9月/ 10月。但由于这些日期是__changes__,因此您可以依靠此列表中的奇数/偶数位置。 – eumiro

相关问题