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 ?


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)

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'

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)

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


: 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.