在Python中將unix時間戳字符串轉換為可讀的日期


我有一個字符串表示一個unix時間戳(即“1284101485”)在Python中,我想將其轉換為可讀的日期。 當我使用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

Answers



使用datetime模塊:

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

在這段代碼中, datetime.datetime看起來很奇怪,但是第一個datetime是模塊名,第二個是類名。 所以datetime.datetime.fromtimestamp()是從datetime模塊的datetime類的fromtimestamp()方法。




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

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




最有投票的答案建議使用時間戳,這是因為它使用本地時區,容易出錯。 為了避免問題,更好的方法是使用UTC:

datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')

posix_time是你想要轉換的Posix紀元時間




>>> 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'



對於一個UNIX時間戳可讀的時間戳,我已經在腳本中使用過了:

import os, datetime

datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

輸出:

'2012年12月26日'




你可以像這樣轉換當前時間

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

將字符串中的日期轉換為不同的格式。

import datetime,time

def createDateObject(str_date,strFormat="%Y-%m-%d"):    
    timeStamp = time.mktime(time.strptime(str_date,strFormat))
    return datetime.datetime.fromtimestamp(timeStamp)

def FormatDate(objectDate,strFormat="%Y-%m-%d"):
    return objectDate.strftime(strFormat)

Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')

Output 03-03-2013



有兩個部分:

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

即使本地時區在過去有不同的utc偏移量,並且python無法訪問tz數據庫,也可以使用便攜式方法來獲取本地時間,即使用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))  



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



快速和骯髒的一個班輪:

'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))

“2013-5-5-1-9-43”




我只是成功地使用了:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date



您可以使用easy_date簡化操作

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")



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