添加后的Python DST和时区检测

Dav*_*nis 7 python timezone datetime pytz 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
Run Code Online (Sandbox Code Playgroud)

我希望结果能够考虑到可能发生的任何DST影响(例如,如果我是在11/4/2012 00:30 AM并添加3小时,我会在02:30 AM,由于退回对于DST).我已经看过使用pytz和python-dateutil,它们似乎都不支持这个,或者至少不支持它而没有包含所有时区的单独文件.踢球者的时间可能不一定与当前系统处于同一时区,甚至不一定是过去.我确信有一种简单的方法可以做到这一点(或者我会期望用Python),但似乎没有什么是我现在所需要的.有任何想法吗?

unu*_*tbu 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
Run Code Online (Sandbox Code Playgroud)

sumVal 留在BST:

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

归一化后,sumVal是GMT:

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

请注意,对于伦敦,DST转换发生在2012-10-28 02:00:00.