测试datetime.datetime是否在夏令时,.dst()函数不返回pytz时区的值

时间:2017-08-17 13:29:40

标签: python datetime pytz

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

对于许多人来说,这是一个类似的问题。例如。 (Daylight savings time in Python

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

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

但是,每当我创建aribtrary datetime并传递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

1 个答案:

答案 0 :(得分:1)

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

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

返回True(假设mydate在DST中)。