使用 .dst() 函数测试 datetime.datetime 是否处于夏令时,不返回带有 pytz 时区的值

Test if datetime.datetime is in daylight savings with .dst() function not returning value with pytz timezone

我正在尝试测试任意本地化日期时间对象是否处于夏令时。

这个问题与许多人提出的问题类似。例如。 (Daylight savings time in Python)

在这些板中,一种测试日期时间是否采用 DST 的方法是使用内置函数 .dst()。这被包装成 bool,如:

if bool(mydatetimeobject.dst()):
    print ("date is DST!")

但是,每当我创建一个任意日期时间并传递一个 tztimezone 时,.dst() 函数不会报告任何内容。好像没有设置时区!

检查此代码片段以查看问题:

>>> from datetime import datetime
>>> import pytz
>>> localtime = pytz.timezone('US/Central')

>>> mydate = datetime(2004,3,1)  # day in standard time
>>> localtime.localize(mydate)
datetime.datetime(2004, 3, 1, 0, 0, tzinfo=<DstTzInfo 'US/Central' CST-1 day, 18:00:00 STD>)
>>> mydate.dst()

>>> mydate = datetime(2004,5,1)  #day in daylight time
>>> localtime.localize(mydate)
datetime.datetime(2004, 5, 1, 0, 0, tzinfo=<DstTzInfo 'US/Central' CDT-1 day, 19:00:00 DST>)
>>> mydate.dst()
>>> bool(mydate.dst())
False

它有效,但您需要将 localtime.localize() 结果分配给一个变量并进行比较。现在您只需显示输出并检查原始的原始日期时间的 .dst()。

a = localtime.localize(mydate)
bool(a.dst())

returns 正确(假设 mydate 在 DST 中)。