2017-04-17 32 views
3

由於我無法控制的原因,因此無法升級到Python 3(它對時區有更好的支持),所以我使用的是Python 2。Python2的日期時間 - 將紀元時間轉換爲UTC時間戳與偏移量

我有一個像1492464960.53這樣的時代,我想將它轉換成這樣的時間戳2017-04-17T21:36:00.530000+00:00

我嘗試使用下面的代碼,但這並不給我需要的時間戳的+00:00部分。

import datetime 
created=1492464960.53 
time_str = datetime.datetime.utcfromtimestamp(created).isoformat() 
print(time_str) 
>> 2017-04-17T21:36:00.530000 

如何添加+00:00部件?

回答

1

剛試過這個,它爲我工作。

首先解釋爲什麼原始解決方案不起作用,據我所知,isoformat()不適用於上述時期值的原因是因爲此方法要求對象使用'utcoffset'屬性返回某些內容,但是當我用這個屬性測試它時,float/epoch上面的值返回'None'。 如果我們沒有處理轉換float的話,isoformat方法可能會工作得很好。

不管怎麼說,到解決方案:

from datetime import datetime, tzinfo 
import pytz 
created = 1492464960.53 
dt = datetime.utcfromtimestamp(created) 

##print results for above 'dt' variable 

2017-04-17 21:36:00.530000 

dt = dt.replace(tzinfo=pytz.utc) 

##print results for above 'dt' variable 

2017-04-17 21:36:00.530000+00:00 

dt.isoformat() 

##print results for above 'dt' variable 

'2017-04-17T21:36:00.530000+00:00' 
+0

謝謝!有沒有什麼辦法可以在不使用pytz的情況下得到相同的結果?我真的沒有選擇在我的服務器上安裝它。 – activelearner

0

對不起,不知道你的意思究竟是什麼有關安裝pytz,我只是點子安裝pytz加入import語句在我的Python殼我的本地機器上。

不知道這是最好的解決辦法,但它似乎已經奏效所以這裏是另類我可以提供:

created = 1492464960.53 
dt = dt.utcnow().fromtimestamp(created, dt.tzname()).isoformat() 

應打印

「2017-04-17T14:36 :00.530000'

from datetime import time 
t = time(00, 00, 00, tzinfo=dt.tzname()) 
tmstmp = dt.isoformat()+'+'+t.strftime("%M:%S %z") 

應打印

2017-04-17T21:36:00.530000 + 00:00

+0

請編輯您的[答](http://stackoverflow.com/a/43461380),而不是發佈另一個。 – FTP

+0

我的歉意Gerry,認爲這是我在Stackoverflow上回答的第一個或第二個問題。將來一定會編輯:) –

相關問題