Wie konvertiert man in Python Sekunden seit der Epoche in ein "datetime" -Objekt?

248

Das timeModul kann in Sekunden seit der 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 Möglichkeit, ein datetime.datetimeObjekt auf dieselbe Weise zu initialisieren ?

Adam Matan
quelle
3
Für die entgegengesetzte Operation gehen Sie hier: Konvertieren Sie ein Datum / Uhrzeit-Objekt in Sekunden
Trevor Boyd Smith

Antworten:

404

datetime.datetime.fromtimestamp Wenn Sie die Zeitzone kennen, können Sie dieselbe Ausgabe wie mit erzeugen 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)
SilentGhost
quelle
42
Bizarrerweise datetime.utcfromtimestampwird ein naiver Zeitstempel erstellt. Ich musste import pytzund benutze datetime.fromtimestamp(1423524051, pytz.utc), um eine bewusste Datums- / Uhrzeitangabe zu erstellen.
Matt
6
Als Folge davon müssen Sie mit Python> = 3.2 die pytzBibliothek nicht importieren, wenn Sie nur den UTC-Zeitstempel möchten - Sie müssen from datetime import datetime, timezoneihn nur wie folgt aufrufen und dann wie folgt aufrufen : datetime.fromtimestamp(1423524051, timezone.utc). Es hat die zusätzliche Bibliothek viele Male gespeichert, wenn ich nur die UTC-Zeitzone von benötige pytz.
Telefon512
38

Sekunden seit der Epoche datetimebis strftime:

>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'
Seganku
quelle
Es sollte datetime.fromtimestamp (1579366345) .strftime ('% Y-% m-% d% H:% M:% S') sein
vml19
25

In den Dokumenten wird empfohlen, ein zeitzonenbewusstes datetime-Objekt aus Sekunden seit der Epoche abzurufen:

Python 3 :

from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)

Python 2 mit pytz:

from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)
Meistro
quelle
Ein Link zur Dokumentation in Ihren Untertiteln ("Python 3", "Python 2") wäre hilfreich - und ich empfehle auch, deren Reihenfolge zu ändern.
Adam Matan
Aktualisiert. Belassen Sie die Reihenfolge gleich, da dies mit den Python-Dokumenten übereinstimmt.
Meistro
Sie müssen nicht pytznur ein utcTzinfo-Objekt erhalten. Es ist einfach, es selbst zu erstellen
jfs
9

Beachten Sie, dass datetime.datetime. fromtimestamp (Zeitstempel) und. utcfromtimestamp (Zeitstempel) schlägt unter Windows für Daten vor dem 1. Januar 1970 fehl, während negative Unix-Zeitstempel auf Unix-basierten Plattformen zu funktionieren scheinen. Die Dokumente sagen dies:

" Dies kann ValueError auslösen, wenn der Zeitstempel außerhalb des von der Plattform C gmtime () - Funktion unterstützten Wertebereichs liegt. Es ist üblich, dass dies auf Jahre von 1970 bis 2038 beschränkt ist. "

Siehe auch Ausgabe 1646728

cbare
quelle
: o) ja, noch 23 Jahre, um es
reparieren
5
Sie könnten es verwenden utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp), um es zu umgehen.
JFS