2015-06-08 29 views
3

我想知道是否蟒使得左手(左旋)和右手(右旋)時間戳之間的區別。在DST日期本地化時間戳時,這會成爲問題。蟒蛇右手VS左手時間戳和DST

說我右手在歐洲本地時間,其中DST的變化,從小時02:00發生於小時03:00 3月30日2014年

2014-03-30 00:30:00 
2014-03-30 01:00:00 
2014-03-30 01:30:00 
2014-03-30 02:00:00 
2014-03-30 03:30:00 
2014-03-30 04:00:00 

如果我要加蓋半小時值因爲在我的那一天本地時區沒有時間戳02:00

NonExistentTimeError: 2014-03-30 02:00:00 

:本地化這些時間戳,我很自然地得到一個錯誤。所以我想知道python是否可以區分左/右手時間戳?

+0

(HTTP ://stackoverflow.com/a/26221183/4279) – jfs

+0

NonExistentTimeError表明,無論是你的輸入錯誤,或者你使用了錯誤的時區來解釋它。 – jfs

+1

我一直在與時間的問題相當長的一段時間,我從來沒有聽說過「左手」與「右」或「左行」與「右旋」適用於時間戳。如果這是我剛纔沒有聽說過的已知事情,那麼請指出我的來源。無論哪種方式,請詳細解釋您的意思,以便其他人也可以學習。 –

回答

0

我認爲正確的方法是使用UTC做任何運算的時候,並使用pytz包,它支持DST的變化轉換自/至UTC。

0

pytz允許您選擇UTC抵銷前/使用is_dst參數DST轉換後:如果您確保時間戳嚴格增加,那麼你可以[使用`pytz`模塊解析這些]

>>> import pytz 
>>> tz = pytz.timezone('Europe/Paris')                
>>> from datetime import datetime                  
>>> naive = datetime.strptime('2014-03-30 02:00:00', '%Y-%m-%d %H:%M:%S')        
>>> tz.localize(naive, is_dst=None)        
Traceback (most recent call last) 
... 
NonExistentTimeError: 2014-03-30 02:00:00 
>>> tz.localize(naive) #XXX WRONG 
datetime.datetime(2014, 3, 30, 2, 0, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>) 
>>> tz.normalize(tz.localize(naive)) # you want this (default is after the transition) 
datetime.datetime(2014, 3, 30, 3, 0, tzinfo=<DstTzInfo 'Europe/Paris' CEST+2:00:00 DST>) 
>>> tz.localize(naive, is_dst=False) #XXX WRONG 
datetime.datetime(2014, 3, 30, 2, 0, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>) 
>>> tz.localize(naive, is_dst=True) #XXX WRONG 
datetime.datetime(2014, 3, 30, 2, 0, tzinfo=<DstTzInfo 'Europe/Paris' CEST+2:00:00 DST>) 
>>> tz.normalize(tz.localize(naive, is_dst=False)) # time corresponding to the offset 
datetime.datetime(2014, 3, 30, 3, 0, tzinfo=<DstTzInfo 'Europe/Paris' CEST+2:00:00 DST>) 
>>> tz.normalize(tz.localize(naive, is_dst=True)) # time corresponding to the offset 
datetime.datetime(2014, 3, 30, 1, 0, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>)