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


248

El timemódulo 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 datetime.datetimeobjeto de la misma manera?


3
para la operación opuesta, vaya aquí: convert-a-datetime-object-to-segundos
Trevor Boyd Smith

Respuestas:


404

datetime.datetime.fromtimestamp servirá, 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)

42
extrañamente, datetime.utcfromtimestampcrea una marca de tiempo ingenua. Tuve que import pytzusar datetime.fromtimestamp(1423524051, pytz.utc)y crear una fecha y hora consciente.
Matt

66
como una continuación de lo anterior, con Python> = 3.2 usted no tiene que importar la pytzbiblioteca si solo deseas la marca de hora UTC - sólo es necesario from datetime import datetime, timezoney luego llama de la siguiente manera: datetime.fromtimestamp(1423524051, timezone.utc). Ha guardado la biblioteca extra muchas veces cuando solo necesito la zona horaria UTC pytz.
phouse512

38

Segundos desde la época datetimehasta strftime:

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

Debe ser datetime.fromtimestamp (1579366345) .strftime ('% Y-% m-% d% H:% M:% S')
vml19

26

De los documentos, la forma recomendada de obtener un objeto de fecha y hora consciente de la 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)

Sería útil un enlace a la documentación en sus subtítulos ("Python 3", "Python 2"), y también recomiendo cambiar su orden.
Adam Matan

Actualizado. Dejando el orden igual, ya que coincide con los documentos de Python.
Meistro

no pytzsolo necesita obtener el utcobjeto tzinfo. Es fácil crearlo usted mismo
jfs

9

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

" Esto puede aumentar ValueError, si la marca de tiempo está fuera del rango de valores admitidos por la función C gmtime () de la plataforma. Es común que esto se restrinja a años en 1970 hasta 2038 "

Ver también Issue1646728


: o) sí, todavía quedan unos 23 años para dejar que se arregle
user3666197

55
podría usarlo utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp)para solucionarlo.
jfs
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.