2010-10-28 96 views
3

http://docs.python.org/library/time.html如何在Python中將日期時間轉換爲UTC時間戳?

time.mktime(T): 這是本地時間的逆函數()。它的參數是 struct_time或完整的9元組(因爲需要 dst標誌;如果它是未知的,使用-1作爲dst 標誌),它表示本地時間而不是UTC的 時間。它 返回一個浮點數,爲 與time()的兼容性。如果 輸入值不能被表示爲 有效時間,無論是OverflowError或 ValueError異常將升高(這 取決於是否無效值 由Python或底層 C庫捕獲)。 它可以生成一個時間的最早日期是 平臺相關。

這說你需要在本地時間,而不是UTC指定你的時間元組。但是,我想用UTC來指定;我不想在箱子上使用當地時區。

有沒有什麼辦法可以讓我從日期時間到時間戳,時間被視爲UTC?當我轉換爲時間戳和從時間戳轉換時,我希望能夠將所有內容保存爲標準化的UTC格式(日期時間對象)。

我希望能夠做這樣的事情,並有x和y出來的一樣:

y = datetime.datetime.utcfromtimestamp(time.mktime(x.timetuple())) 
x = dateutil.parser.parse('Wed, 27 Oct 2010 22:17:00 GMT') 
stamp = time.mktime(x.timetuple()) 
y = datetime.datetime.utcfromtimestamp(stamp) 
x 
datetime.datetime(2010, 10, 27, 22, 17, tzinfo=tzutc()) 
y 
datetime.datetime(2010, 10, 28, 6, 17) 
+1

['timestamp =(x - datetime(1970,1,1,tzinfo = dateutil.tz.tzutc())).total_seconds()'](http://stackoverflow.com/a/8778548/4279) – jfs 2013-06-07 19:43:39

回答

5

我認爲你正在尋找calendar.timegm

import datetime 
import dateutil.parser 
import calendar 

x = dateutil.parser.parse('Wed, 27 Oct 2010 22:17:00 GMT') 
stamp = calendar.timegm(x.timetuple()) 
y = datetime.datetime.utcfromtimestamp(stamp) 
print(repr(x)) 
# datetime.datetime(2010, 10, 27, 22, 17, tzinfo=tzutc()) 

print(repr(y)) 
# datetime.datetime(2010, 10, 27, 22, 17) 
+0

謝謝!這非常有用。 'calendar.timegm'不會被本地時區污染。 – Themerius 2012-09-04 18:01:27

0

email從STDLIB包可以解析rfc 5322格式的時間字符串(以前爲rfc 2822,rfc 822):

#!/usr/bin/env python 
from datetime import datetime, timedelta 
from email.utils import mktime_tz, parsedate_tz 

time_tuple = parsedate_tz('Wed, 27 Oct 2010 22:17:00 GMT') 
posix_timestamp = mktime_tz(time_tuple) # integer 
utc_time = datetime(*time_tuple[:6])  # naive datetime object 
assert utc_time == (datetime(1970, 1, 1) + timedelta(seconds=posix_timestamp)) 

Python: parsing date with timezone from an email

要轉換表示UTC時間POSIX時間戳天真的DateTime對象:

posix_timestamp = (utc_time - datetime(1970, 1, 1)).total_seconds() 

Converting datetime.date to UTC timestamp in Python

相關問題