2010-07-23 65 views
5

所以我有UTC時間的日期時間對象,我想將它們轉換爲UTC時間戳。問題是,time.mktime會對本地時間進行調整。如何創建不針對本地時間調整的unix時間戳?

因此,這裏是一些代碼:

import os 
import pytz 
import time 
import datetime 

epoch = pytz.utc.localize(datetime.datetime(1970, 1, 1)) 
print time.mktime(epoch.timetuple()) 

os.environ['TZ'] = 'UTC+0' 
time.tzset() 
print time.mktime(epoch.timetuple()) 

下面是一些輸出:

Python 2.6.4 (r264:75706, Dec 25 2009, 08:52:16) 
[GCC 4.2.1 (Apple Inc. build 5646) (dot 1)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> import pytz 
>>> import time 
>>> import datetime 
>>> 
>>> epoch = pytz.utc.localize(datetime.datetime(1970, 1, 1)) 
>>> print time.mktime(epoch.timetuple()) 
25200.0 
>>> 
>>> os.environ['TZ'] = 'UTC+0' 
>>> time.tzset() 
>>> print time.mktime(epoch.timetuple()) 
0.0 

所以,很顯然,如果系統在UTC時間沒有問題,但如果它不是,這是一個問題。設置環境變量並調用time.tzset可行,但安全嗎?我不想爲整個系統調整它。

是否有另一種方法可以做到這一點?或者用這種方式調用time.tzset是安全的。

回答

6

calendar模塊包含解決此問題的calendar.timegm

calendar.timegm(元組)

一種無關但方便的功能,需要一個時間元組,例如由time模塊中的gmtime()函數返回,並返回相應的Unix時間戳值,假定1970年的時期,並且POSIX編碼。實際上,time.gmtime()timegm()彼此是相反的。