Si hallas alguna incompatibilidad en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes añadir el código al proyecto final.
Solución:
datetime.fromtimestamp(ts)
convierte “segundos desde la época” en un objeto ingenuo de fecha y hora que representa la hora local. tzinfo
es siempre None
en este caso.
La zona horaria local puede haber tenido un desplazamiento UTC diferente en el pasado. En algunos sistemas que brindan acceso a una base de datos histórica de zonas horarias, fromtimestamp()
puede tenerlo en cuenta.
Para obtener el desplazamiento UTC utilizado por fromtimestamp()
:
utc_offset = fromtimestamp(ts) - utcfromtimestamp(ts)
Consulte también Obtención del desplazamiento UTC de la computadora en Python.
De la documentación de Python:
método de clase
datetime
.fromtimestamp
(timestamp, tz=None
)Devuelve la fecha y la hora locales correspondientes a la marca de tiempo POSIX, como la que devuelve
time.time()
. Si es un argumento opcional tz esNone
o no especificado, la marca de tiempo se convierte a la fecha y hora local de la plataforma, y el devueltodatetime
el objeto es ingenuo.Más tz debe ser una instancia de una clase
tzinfo
subclase, y la marca de tiempo se convierte en tzla zona horaria de . En este caso el resultado es equivalente atz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))
.
los key parte de esta descripción en relación con su pregunta es que cuando no especifica una zona horaria, no solo usa la zona horaria local, sino que el resultado es ingenuo. Parece que quieres que sea consciente.
Esta es una distinción particular hecha por Python, y se analiza justo en la parte superior de la documentación de fecha y hora.
Si lo que quieres es un datetime
eso es consciente de la zona horaria local, pruebe la biblioteca tzlocal. Se centra en ese problema en particular. Véase también esta pregunta.
Si conoce la zona horaria de la marca de tiempo que desea convertir, simplemente puede enviarla mientras llama fromtimestamp
:
>>> from datetime import datetime
>>> import pytz
>>>
>>> datetime.fromtimestamp(1562684265, pytz.timezone("Europe/Stockholm"))
datetime.datetime(2019, 7, 9, 16, 57, 45, tzinfo=)
>>>
>>> datetime.fromtimestamp(1562684265, pytz.timezone("UTC"))
datetime.datetime(2019, 7, 9, 14, 57, 45, tzinfo=)
Puntuaciones y reseñas
Te invitamos a defender nuestra función mostrando un comentario y valorándolo te damos las gracias.