2011-09-20 49 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