2010-05-21 72 views

回答

51

您可以使用time.localtime并查看返回值中的tm_isdst标志。

>>> import time 
>>> time.localtime() 
(2010, 5, 21, 21, 48, 51, 4, 141, 0) 
>>> _.tm_isdst 
0 

使用time.localtime(),你可以问同一个问题的任意时间,看看是否DST将是(或曾经)在当前时区的影响。

+0

使用time.daylight属性可能会更清晰一些。如果您当前的时区有DST,它将返回一个非零结果。 – 2010-05-21 15:33:30

+7

@brian buck:虽然不同。对于给定的时区,'time.daylight'是恒定的,因为日光区域存在或不存在。另一方面,'tm_isdst'标志反映在DST开始和结束日期内给定的时间是*。 – 2010-05-21 19:28:08

+0

'time.daylight'的这种混淆似乎是一个更大的问题:http://bugs.python.org/issue7229。 – 2011-12-06 22:19:00

-8

如果您想检查日光是否与当前的计算机设置一起生效,请使用time.daylight。

>>> import time 
>>> print time.daylight 

time.daylight只是说电脑是否是目前正处于夏令时,如果没有电脑有“自动调整为夏令时时钟”设置。对于那些设置为不进行夏令时调整的电脑,time.daylight将全年始终为0。

确定计算机是否会在一年中调整夏令时的一种方法是获取由time.tzname返回的元组,并且如果它们存在差异(即,len(set(time.tzname))!= 1 ),那么电脑会开启夏令时调整功能。

+8

'time.daylight只说明电脑当前是否处于夏令时状态 - 这不是事实。 'time.daylight'只会说明计算机是否在时区中,而时区会有与时间相关的时间变化。它没有说明它们是否有效。这可以用'tm_isdst'来检查 – 2013-03-24 06:17:23

+0

BTW:tzname的文档:'一个包含两个字符串的元组:第一个是本地非DST时区的名称,第二个是本地DST时区的名称。如果没有定义DST时区,则不应使用第二个字符串。“即使没有定义dst,len也可能> 1。 – 2013-03-24 08:24:27

+1

投票删除答案,因为它不正确。 – 2016-09-21 13:51:08