In Python, wie konvertiere Sie Sekunden seit Epoche zu einem `datetime` Objekt?
Frage
Das time
Modul kann unter Verwendung Sekunden seit Epoche initialisiert werden:
>>> import time
>>> t1=time.gmtime(1284286794)
>>> t1
time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19,
tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)
Gibt es eine elegante Art und Weise ein datetime.datetime
Objekt in der gleichen Art und Weise zu initialisieren?
Lösung
datetime.datetime.fromtimestamp
tun wird, wenn Sie die Zeitzone kennen, könnten Sie produzieren die gleiche Leistung wie mit time.gmtime
>>> datetime.datetime.fromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 11, 19, 54)
oder
>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)
Andere Tipps
Aus den Dokumenten, die empfohlene Methode, eine Zeitzone bewusst Datetime-Objekts von Sekunden seit Epoche des Erhaltens ist:
Python 3 :
from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)
from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)
Beachten Sie, dass datetime.datetime. fromtimestamp ( Zeitstempel) und. utcfromtimestamp (Timestamp) scheitern an Fenstern für Daten vor dem 1. Januar 1970 während negativer Unix-Zeitstempel zu funktionieren scheint auf Unix-basierte Plattformen. Die docs sagen dies:
" Diese Valueerror erhöhen kann, wenn der Zeitstempel aus der Bereich der Werte, die von der Plattform C gmtime () Funktion unterstützt. Es ist üblich, dies Jahren 1970 bis 2038 beschränkt werden "
Siehe auch Issue1646728