2017-04-10 91 views
0

我試圖將此unix時間戳1491613677888轉換爲可讀的日期。 這裏找到(計算器)是python腳本:在Python中將unix時間戳(長度爲13)的字符串轉換爲可讀的日期

import datetime 
print(
    datetime.datetime.fromtimestamp(
    int("1284101485") 
    ).strftime('%Y-%m-%d %H:%M:%S') 
) 

但是當我把我戳在那裏,我得到這個錯誤:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
OSError: [Errno 22] Invalid argument 

現在我看到,我使用時間戳爲3個字符更長的時間。 我檢查了這個鏈接: http://www.unixtimestamp.com/index.php

並看到它得到它的時間。 我如何使用python做到這一點? (我使用Python 3.4)

+1

不能重現(python2.7 + 3) – Arount

+2

你在哪裏得到最終的888在你的時間戳?第一部分'1491613677'是2017-04-08T01:07:57 + 00:00,這可能是你想要的。有了它,你的代碼完美地工作。 –

+2

你是從一些以毫秒輸出的函數得到它的嗎? –

回答

2

timestamp是而不是'經典的'Unix時間戳(自1970年1月1日以來的秒數),如表達式所示毫秒。

你可以這樣翻譯的:

import datetime 

timestamp_with_ms = 1491613677888 

# We separate the 'ordinary' timestamp and the milliseconds 
timestamp, ms = divmod(timestamp_with_ms, 1000) 
#1491613677 888 

# We create the datetime from the timestamp, we must add the 
# milliseconds separately 
dt = datetime.datetime.fromtimestamp(timestamp) + datetime.timedelta(milliseconds=ms) 


formatted_time = dt.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] 
# With Python 3.6, you could use: 
# formatted_time = dt.isoformat(sep=' ', timespec='milliseconds') 

print(formatted_time) 
# 2017-04-08 03:07:57.888 

編輯:我沒有注意到fromtimestamp接受浮點值。所以,我們可以簡單地做:

import datetime 
timestamp_with_ms = 1491613677888 

dt = datetime.datetime.fromtimestamp(timestamp_with_ms/1000) 

formatted_time = dt.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] 
# With Python 3.6, you could use: 
# formatted_time = dt.isoformat(sep=' ', timespec='milliseconds') 

print(formatted_time) 
# 2017-04-08 03:07:57.888 
0

試試這個 -

$ date -d @1284101485 
Fri Sep 10 01:51:25 CDT 2010 

$ date -d @1284101485 '+%Y-%m-%d %H:%M:%S' 
2010-09-10 01:51:25 
2

你的時間戳爲3個字符長,是一個標準的UNIX時間戳?這意味着你的時間戳從今天起至少有4萬年。否則,最後3個字符可能代表其他內容,如毫秒,但不能解釋您看到的錯誤。

如果它們是毫秒級,並且看到你沒有在格式字符串中使用它們,我認爲簡單地剝離它們並沒有什麼壞處。

standard_unix_ts = int("1284101485000"[:-3]) 

編輯考慮到@cdarke的評論,我不是建議這樣的:

standard_unix_ts = int("1284101485000"[:10]) 

EDIT 2繼GILS評論

import datetime 

not_unix_ts = "1284101485088" 
unix_ts, milliseconds = not_unix_ts[:10], not_unix_ts[10:] 
dt = datetime.datetime.fromtimestamp(float(unix_ts)) 
FORMAT_STRING = '%Y-%m-%d %H:%M:%S' 
print("%s and %s milliseconds" % (dt.strftime(FORMAT_STRING), milliseconds)) 
+0

只是一個想法,如果存在正確長度的時間戳,採用前10個字符而不是去掉最後3個字符可能會更安全。 – cdarke

+0

非常有效的評論,我完全同意。我添加的鏈接中有 – smassey

+0

,我看到了毫秒 - 我需要它們。該時間戳是密鑰的一部分。我需要所有這一切。那麼我怎樣才能在python 3.4中獲得毫秒? –

相關問題