加法后的 Python DST 和时区检测

Posted

技术标签:

【中文标题】加法后的 Python DST 和时区检测【英文标题】:Python DST & Time Zone Detection After Addition 【发布时间】:2011-11-21 12:25:51 【问题描述】:

所以我目前有一行代码如下所示:

        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,因为DST 的后备)。我已经研究过使用 pytz 和 python-dateutil,但它们似乎都不支持这一点,或者至少在没有包含所有时区的单独文件的情况下不支持它。更重要的是,时间可能不一定与当前系统处于同一时区,甚至可能是过去。我确信有一种简单的方法可以做到这一点(或者我希望 Python 如此),但我现在似乎不需要什么。有什么想法吗?

【问题讨论】:

【参考方案1】:

也许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 为 GMT:

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

注意,对于伦敦,夏令时转换发生在 2012-10-28 02:00:00

【讨论】:

以上是关于加法后的 Python DST 和时区检测的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 函数学习13-图像的加法运算(cv2.add)

OpenCV 函数学习15-图像的加权加法(cv2.addWeight)

8086算术运算类指令

如何显示 dst 空闲时区偏移量?

从一个本地时区到另一个本地时区的 Python 日期时间转换(+ 奖励 DST)

加法将 number 类型 转换成 string 类型