2011-05-10 39 views
15

我正在處理一個代碼,該代碼給了我utc時間戳,並且我想將它們轉換爲適當的日期時間。不幸的是,當我用pytz測試簡單的例子時,日期時間增加了6個小時(CST是UTC的偏移量)。我需要保持時區數據正確,因爲我正在計算其他時區之間的差異。任何想法爲什麼以及如何將utc時間戳轉換爲utc日期時間?將python datetime轉換爲時間戳並回到UTC仍然使用本地時區

In [1]: import pytz 

In [2]: from datetime import datetime 

In [3]: import time 

In [4]: datetime.fromtimestamp(time.mktime(datetime(7,1,1, tzinfo=pytz.UTC).timetuple()), tz=pytz.UTC) 
Out[4]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>) 

In [5]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()), tz=pytz.UTC) 
Out[5]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>) 

In [6]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple())) 
Out[6]: datetime.datetime(2007, 1, 1, 0, 0) 
+0

相關:我怎樣才能根據UTC紀元以來轉換成秒日期?](http://stackoverflow.com/a/8778548/4279) – jfs 2014-02-22 09:00:34

回答

1

您是否碰巧在美國CST時區或同等地位?

看起來像是顯示當地時間是2007年1月1日午夜的UTC時間。

+0

是的,我在美國科技委。我想我想知道什麼是正確的方式來調用這個來獲取utc日期,我認爲tzinfo會正確設置時區。 – aterrel 2011-05-10 22:18:05

+0

這是來自pytz文檔:>>> datetime(2002,10,27,12,0,0,tzinfo = pytz.utc).strftime(fmt) '2002-10-27 12:00:00 UTC + 0000 ' – Olaf 2011-05-11 04:12:01

+0

奧拉夫感謝您的repsonse,但這不完全是問題。 strftime在datetime對象上正常工作。不起作用的是將其轉換爲時間戳,然後從時間戳獲取相同的utc。 – aterrel 2011-05-11 13:26:41

41

要獲得從「秒從新紀元」表示時間在UTC時間戳天真的DateTime對象:

from datetime import datetime 

utc_dt = datetime.utcfromtimestamp(ts) 

如果你想獲得UTC時區的知曉日期時間對象:

import pytz 

aware_utc_dt = utc_dt.replace(tzinfo=pytz.utc) 

要將其轉換爲t Ø一些其他時區:

tz = pytz.timezone('America/Montreal') 
dt = aware_utc_dt.astimezone(tz) 

要時間戳轉換爲了解DateTime對象直接給定時區:

dt = datetime.fromtimestamp(ts, tz) 
相關問題