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.