2010-05-21 211 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