2012-03-16 175 views
106

我有一個數據文件包含像「1331856000000」的時間戳。不幸的是,我沒有很多格式的文檔,所以我不確定時間戳是如何格式化的。我試過Python的標準datetime.fromordinal()datetime.fromtimestamp()和其他幾個,但沒有任何匹配。我很確定這個特定的數字對應於當前日期(例如2012-3-16),但沒有更多。如何將整數時間戳轉換爲Python日期時間

如何將此號碼轉換爲datetime

回答

193

datetime.datetime.fromtimestamp()是正確的,除非您可能有毫秒級的時間戳(如JavaScript),但fromtimestamp()預計Unix時間戳,以秒爲單位。

那樣做:

>>> import datetime 
>>> your_timestamp = 1331856000000 
>>> date = datetime.datetime.fromtimestamp(your_timestamp/1e3) 

,其結果是:

>>> date 
datetime.datetime(2012, 3, 16, 1, 0) 

是否回答你的問題?

EDIT:J.F.塞巴斯蒂安由1e3正確建議使用真分割(浮動1000)。如果你想得到準確的結果,差異是很大的,因此我改變了我的答案。不同的結果是Python 2.x的默認行爲,它總是在分割時使用int(使用/運算符)int,int(這稱爲floor division)。通過與1e3除數(的1000是表示作爲浮點型)或具有float(1000)(或1000.等)替換除數1000(作爲一個int),分割變得真實劃分。除以floatintfloat通過intfloat通過float等。而當有傳遞給fromtimestamp()方法時間戳一些小數部分,這種方法的結果還包含有關小數部分(信息的數量時的Python 2.x的返回float微秒)。

+6

使用真正的部門:'/ 1e3' – jfs 2012-03-16 21:42:59

+0

@ J.F.Sebastian:你是完全正確的,我編輯了我的答案並添加了一些解釋你爲什麼是對的。如果您不同意解釋,請告訴我。 – Tadeck 2012-03-16 22:06:26

+3

我發現更清楚寫x * 0.001而不是x/1e3 – 2013-11-06 17:37:34