2013-01-22 31 views
0

我有工作代碼。我的問題是爲什麼這樣做?pythons mktime如何在沒有時區信息的情況下工作?

#"04/13/05 2:30pm EDT" <- original date string 
from datetime import datetime, timedelta 
from pytz import timezone 
import pytz 
import time 

T= time.struct_time((2005,4,13,14,30,0,0,0,1)) 
t = time.mktime(T) 

print(t) 

此打印

1113417000, 

這是一家網絡轉換器,http://www.epochconverter.com/,版畫

Your time zone: 4/13/2005 2:30:00 PM GMT-4 

這是正確的。我的問題是,它是如何知道在EDT的時間是GMT-4? 9元組的最後一個是「dst標誌」,但有許多時區使用DST。那麼它如何檢測正確的時區?

回答

2

它通過stdlib C time functions向您的操作系統詢問該信息。

引述time module documentation

大多數在這個模塊調用平臺的C庫函數定義具有相同名稱的功能。查閱平臺文檔有時可能會有幫助,因爲這些功能的語義在不同平臺之間有所不同。

您可以傳入-1作爲DST標誌,讓庫爲您設置它,請參閱time.struct_time。在我的Mac OS X 10.7.5設置配置給歐洲/奧斯陸時區,這給了我:

>>> import time 
>>> time.mktime((2005,4,13,14,30,0,0,0,-1)) 
1113395400.0 

,或者由epochconverter '翻譯':

Your time zone: 4/13/2005 2:30:00 PM GMT+2 
1

按照documentation的函數time.mktime(t)需要一個以當地時間表示的參數(struct_time),而不是UTC。本地時間來自您的操作系統。您可以看到您當地的DST時區,例如,time.tzname

相關問題