使用 .dst() 函数使用 pytz 时区不返回值来测试日期时间.datetime.datetime 是否采用夏令时



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

这与许多人已经问过的问题类似。 例如。(Python中的夏令时(

在这些开发板中,测试日期时间是否为 DST 的一种方法是使用内置函数 .dst((。 这被包装成布尔值,如下所示:

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

但是,每当我创建一个 aribtrary 日期时间并传递一个 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())

返回 True(假设 mydate 采用 DST 格式(。

最新更新