[python] Konvertieren der Unix-Timestamp-Zeichenfolge in ein lesbares Datum



Answers

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

Genommen von http://seehuhn.de/pages/pdate

Question

Ich habe eine Zeichenfolge, die einen Unix-Zeitstempel (zB "1284101485") in Python darstellt, und ich möchte ihn in ein lesbares Datum umwandeln. Wenn ich time.strftime verwende, time.strftime ich einen 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'



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



Es gibt eine interessante Möglichkeit, wo Sie sich keine Gedanken über die Zeitzonen, die Zeit usw. machen müssen. Konvertieren Sie die Zeichenfolge einfach in das Excel-Datumsformat und dann in ein lesbares Datum / Uhrzeit:

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)



Hast du dir das Datetime-Paket angesehen? Ich glaube, es hat eine fromUnixTimestamp-Methode.




Anders als die Verwendung von time / datetime- Paket, Pandas können auch verwendet werden, um das gleiche Problem zu lösen.Hier ist, wie wir Pandas verwenden können , Zeitstempel in lesbare Datum zu konvertieren:

Zeitstempel können in zwei Formaten vorliegen:

  1. 13 Ziffern (Millisekunden) - Um Millisekunden in Datum zu konvertieren, verwenden Sie:

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
  2. 10 Ziffern (Sekunden) - Um Sekunden in Datum zu konvertieren, verwenden Sie:

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



Es gibt zwei Teile:

  1. Konvertiere den Unix-Zeitstempel ("Sekunden seit Epoche") in die lokale Zeit
  2. Zeigen Sie die lokale Zeit im gewünschten Format an.

Ein portabler Weg, um die lokale Zeit zu erhalten, die funktioniert, auch wenn die lokale Zeitzone einen anderen utc-Offset in der Vergangenheit hatte und python keinen Zugriff auf die tz-Datenbank hat, ist die Verwendung einer pytz Zeitzone:

#!/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)

Um es anzuzeigen, können Sie jedes beliebige Zeitformat verwenden, das von Ihrem System unterstützt wird, zB:

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

Wenn Sie keine Ortszeit benötigen, um stattdessen eine lesbare UTC-Zeit zu erhalten:

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

Wenn Sie sich nicht um die Zeitzonenprobleme kümmern, die sich darauf auswirken könnten, welches Datum zurückgegeben wird oder ob Python Zugriff auf die tz-Datenbank auf Ihrem System hat:

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

In Python 3 konnten Sie nur mit stdlib ein timezone-aware datetime ermitteln (der UTC-Offset ist möglicherweise falsch, wenn python keinen Zugriff auf die tz-Datenbank auf Ihrem System hat, zB unter Windows):

#!/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)"))

Funktionen aus dem Zeitmodul sind dünne Wrapper um die entsprechende C-API und daher können sie weniger portabel sein als die entsprechenden datetime Methoden, sonst könnten Sie sie auch verwenden:

#!/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))  



Links