Cómo convertir la marca de tiempo entera en el 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 está formateada la marca de tiempo. He probado el datetime.fromordinal() estándar de datetime.fromordinal() y datetime.fromtimestamp() y algunos otros, pero nada coincide. Estoy bastante seguro de que ese número en particular corresponde a la fecha actual (por ejemplo, 2012-3-16), pero no mucho más.

¿Cómo convierto este número a datetime ?

datetime.datetime.fromtimestamp() es correcto, excepto que probablemente tenga una marca de hora en milisegundos (como en JavaScript), pero fromtimestamp() espera la marca de hora de Unix, en segundos.

Hazlo así:

 >>> 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 tu pregunta?

EDITAR : JF Sebastian sugirió correctamente usar la división verdadera por 1e3 (float 1000 ). La diferencia es significativa, si desea obtener resultados precisos, así que cambié mi respuesta. La diferencia se debe al comportamiento predeterminado de Python 2.x, que siempre devuelve int cuando se divide (utilizando / operator) int por int (esto se llama división de piso ). Al reemplazar el divisor 1000 (que es un int ) con el divisor 1e3 (que es una representación de 1000 como flotante) o con un float(1000) (o 1000. etc.), la división se convierte en una verdadera división . Python 2.x devuelve float al dividir int por float , float por int , float por float etc. Y cuando hay una 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).