[python] 將unix時間戳字符串轉換為可讀的日期



Answers

>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

取自http://seehuhn.de/pages/pdate

Question

我有一個字符串表示Python中的unix時間戳(即“1284101485”),我想將它轉換為可讀的日期。 當我使用time.strftime ,我得到一個TypeError

>>>import time
>>>print time.strftime("%B %d %Y", "1284101485")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument must be 9-item sequence, not str



>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 2010'
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'



你看過日期時間包嗎? 我相信它有一個fromUnixTimestamp方法。




import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp



有兩部分:

  1. 將unix時間戳(“epoch以來的秒數”)轉換為當地時間
  2. 以所需格式顯示當地時間。

即使本地時區在過去有不同的utc偏移量,並且python無法訪問tz數據庫,也可以使用pytz時區獲得本地時間的pytz

#!/usr/bin/env python
from datetime import datetime
import tzlocal  # $ pip install tzlocal

unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)

要顯示它,您可以使用您的系統支持的任何時間格式,例如:

print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y"))  # print date in your format

如果您不需要本地時間,則可以獲得可讀的UTC時間:

utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))

如果您不關心可能影響返回日期的時區問題,或者python可以訪問系統上的tz數據庫:

local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))

在Python 3中,只能使用stdlib獲得時區感知的日期時間(如果python無法訪問系統上的tz數據庫,例如在Windows上,則UTC偏移量可能會錯誤):

#!/usr/bin/env python3
from datetime import datetime, timezone

utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))

來自time模塊的函數是相應C API的簡潔包裝,因此它們可能不如相應的datetime方法便攜,否則您也可以使用它們:

#!/usr/bin/env python
import time

unix_timestamp  = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time)) 
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))  



有一種有趣的方式,您不必擔心時區,utc等。只需將字符串轉換為Excel日期格式,然後再轉換為可讀的日期/時間即可:

import datetime

def xldate_to_datetime(xldate):
    temp = datetime.datetime(1899, 12, 30)
    delta = datetime.timedelta(days=xldate)
    return temp+delta

ts = "1284101485"
tsxl = ((int(ts)/60)/60)/24 + 25569
readabledate =  xldate_to_datetime(tsxl)
print(readabledate)



除了使用時間/日期時間包以外,還可以使用熊貓來解決同樣的問題。以下是我們如何使用熊貓時間戳轉換為可讀日期

時間戳可以有兩種格式:

  1. 13位數字(毫秒) - 要將毫秒數轉換日期,請使用:

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
  2. 10位數字(秒) - 要將秒數轉換為日期,請使用:

    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    
    Output: '2017-04-30 05:31:01'
    





Links