En Python, ¿cómo convertir segundos desde la época a un objeto `datetime`?

El módulo de time se puede inicializar usando segundos desde la época:

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

¿Hay una manera elegante de inicializar un objeto datetime.datetime de la misma manera?

datetime.datetime.fromtimestamp , si conoce la zona horaria, podría producir la misma salida que con time.gmtime

 >>> datetime.datetime.fromtimestamp(1284286794) datetime.datetime(2010, 9, 12, 11, 19, 54) 

o

 >>> datetime.datetime.utcfromtimestamp(1284286794) datetime.datetime(2010, 9, 12, 10, 19, 54) 

Segundos desde epoch hasta datetime hasta strftime :

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

De los documentos, la forma recomendada de obtener un objeto de fecha y hora de zona horaria desde segundos desde la época es:

Python 3 :

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

Python 2 , usando pytz :

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

Tenga en cuenta que datetime.datetime. fromtimestamp (timestamp) y. utcfromtimestamp (timestamp) falla en Windows para las fechas anteriores al 1 de enero de 1970, mientras que las marcas de tiempo unix negativas parecen funcionar en plataformas basadas en unix. Los doctores dicen esto:

” Esto puede boost el error de valor, si la marca de tiempo está fuera del rango de valores admitidos por la función gmtime () de la plataforma. Es común que esto se limite a los años de 1970 a 2038 ”

Vea también Issue1646728