2011-09-20 53 views
7

所以我現在有一個行代碼,看起來像這樣:Python的DST和時區的檢測加入後

 t1 = datetime(self.year, self.month, self.day, self.hour, self.minute, self.second) 
     ... 
     t2 = timedelta(days=dayNum, hours=time2.hour, minutes=time2.minute, seconds=time2.second) 
     sumVal = t1 + t2 

我想對於結果考慮任何DST影響可能發生(如如果我在2012年11月4日上午00:30並加上3小時,我會在02:30上午,因爲夏令時會倒退)。我已經看過使用pytz和python-dateutil,它們都不支持,或者至少不支持它沒有包含所有時區的單獨文件。踢球者認爲時間可能不一定與當前系統處於同一時區,甚至可能在過去。我確信有一個簡單的方法可以做到這一點(或者我期望從Python中脫穎而出),但似乎沒有什麼是我現在需要的。有任何想法嗎?

回答

5

也許pytznormalize方法是你在找什麼:

import datetime as dt 
import pytz 

tz=pytz.timezone('Europe/London') 
t1 = dt.datetime(2012,10,28,0,30,0) 
t1=tz.localize(t1) 
t2 = dt.timedelta(hours=3) 
sumVal = t1 + t2 

sumVal保持BST:

print(repr(sumVal)) 
# datetime.datetime(2012, 10, 28, 3, 30, tzinfo=<DstTzInfo 'Europe/London' BST+1:00:00 DST>) 

正常化後,sumVal是在格林尼治標準時間:

sumVal = tz.normalize(sumVal) 
print(repr(sumVal)) 
# datetime.datetime(2012, 10, 28, 2, 30, tzinfo=<DstTzInfo 'Europe/London' GMT0:00:00 STD>) 

請注意,倫敦的DST轉換髮生在2012-10-28 02:00:00