it-swarm.com.de

Wie konvertieren Sie in Python Sekunden seit Epoche in ein "datetime" -Objekt?

Das time Modul kann innerhalb von 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 Möglichkeit, ein datetime.datetime Objekt auf die gleiche Weise?

209
Adam Matan

datetime.datetime.fromtimestamp funktioniert, wenn Sie die Zeitzone kennen, können Sie die gleiche Ausgabe 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)
351
SilentGhost

Sekunden seit Epoche bis datetime bis strftime :

>>> ts_Epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_Epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'
30
Seganku

In den Dokumenten wird die folgende Methode empfohlen, um ein datetime-Objekt mit Zeitzonenerkennung aus Sekunden seit Epoch zu erhalten:

Python :

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)
18
Meistro

Beachten Sie, dass datetime.datetime . fromtimestamp (timestamp) und . tcfromtimestamp (timestamp) bei Fenstern vor dem 1. Januar 1970 fehlschlagen, während negative Unix-Zeitstempel auf Unix zu funktionieren scheinen Plattformen. Die Dokumente sagen Folgendes:

Dies kann ValueError auslösen, wenn der Zeitstempel außerhalb des von der Plattformfunktion C gmtime () unterstützten Wertebereichs liegt. In der Regel ist dies in den Jahren 1970 bis 2038 auf Jahre beschränkt. "

Siehe auch Issue1646728

7
cbare