Cómo convertir timestamp entero a datetime de Python
Tengo un archivo de datos que contiene marcas de tiempo como "1331856000000". Desafortunadamente, no tengo mucha documentación para el formato, así que no estoy seguro de cómo se formatea la marca de tiempo. He probado el estándar de Python datetime.fromordinal()
y datetime.fromtimestamp()
y algunos otros, pero nada coincide. Estoy bastante seguro de que ese número particular corresponde a la fecha actual (por ejemplo, 2012-3-16), pero no mucho más.
¿Cómo convertir este número a un datetime
?
1 answers
datetime.datetime.fromtimestamp()
es correcto, excepto que probablemente tenga la marca de tiempo en milisegundos (como en JavaScript), pero fromtimestamp()
espera la marca de tiempo Unix, en segundos.
Hazlo así: {[27]]}
>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)
Y el resultado es:
>>> date
datetime.datetime(2012, 3, 16, 1, 0)
¿Responde a su pregunta?
EDITAR : J. F. Sebastian sugirió correctamente a usar la verdadera división por 1e3
(float 1000
). La diferencia es significativa, si desea obtener resultados precisos, por lo que cambié mi respuesta. La diferencia se debe al comportamiento predeterminado de Python 2.x, que siempre devuelve int
al dividir (usando el operador /
) int
por int
(esto se llama división de piso). Reemplazando el divisor 1000
(siendo un int
) con el divisor 1e3
(siendo la representación de 1000
como flotador) o con float(1000)
(o 1000.
etc.), la división se convierte en verdadera división. Python 2.x devuelve float
al dividir int
por float
, float
por int
, float
por float
, etc. Y cuando hay alguna parte fraccionaria en la marca de tiempo pasada al método fromtimestamp()
, el resultado de este método también contiene información sobre esa parte fraccionaria (como el número de microsegundos).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-24 16:23:32