2012-03-16 15 views
106

Tengo un archivo de datos que contiene las marcas de tiempo como "1331856000000". Lamentablemente, no tengo mucha documentación para el formato, por lo que no estoy seguro de cómo se formatea la marca de tiempo. He intentado con el estándar de Python datetime.fromordinal() y datetime.fromtimestamp() y algunos otros, pero no hay coincidencias. 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 convertir marca_de_tiempo a Python fecha y hora

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

Respuesta

193

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 de Unix, en segundos.

hacerlo 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) 

lo hace responde a su pregunta?

EDITAR: J. F. Sebastián sugirió correctamente para su uso verdadera división por 1e3 (flotar 1000). La diferencia es significativa, si desea obtener resultados precisos, entonces cambié mi respuesta. La diferencia resulta del comportamiento predeterminado de Python 2.x, que siempre devuelve int al dividir (usando el operador /) int por int (esto se llama división del piso). Al reemplazar el divisor 1000 (siendo un int) con el 1e3 divisor (siendo representación de 1000 como float) o con float(1000) (o 1000. etc.), la división se convierte verdadera división. Python 2.x devuelve float cuando se divide por intfloat, float por int, float por float etc, y cuando hay alguna parte fraccionaria de la marca de tiempo transcurrido a fromtimestamp() método, el resultado de este método también contiene información acerca de esa parte fraccional (como el número de microsegundos).

+6

uso verdadera división: '/ 1e3' – jfs

+0

@ J.F.Sebastian: Usted es totalmente correcto, he editado mi respuesta y añadido alguna explicación de por qué tiene usted razón. Si no está de acuerdo con la explicación, hágamelo saber. – Tadeck

+3

encuentro más clara para escribir x * 0,001 en lugar de x/1E3 –

Cuestiones relacionadas