2011-09-29 72 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

相關問題