Cómo convertir la marca de tiempo entera a la fecha y hora de Python

3 minutos de lectura

Cómo convertir la marca de tiempo entera a la fecha y hora de Python
Cerín

Tengo un archivo de datos que contiene marcas de tiempo como “1331856000000”. Desafortunadamente, no tengo mucha documentación para el formato, por lo 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 en particular corresponde a la fecha actual (por ejemplo, 2012-3-16), pero no mucho más.

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

Cómo convertir la marca de tiempo entera a la fecha y hora de Python
Tadeck

datetime.datetime.fromtimestamp() es correcto, excepto que probablemente tenga una marca de tiempo en milisegundos (como en JavaScript), pero fromtimestamp() espera la marca de tiempo 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 a tu pregunta?

EDITAR: JF Sebastian sugirió correctamente a usar división verdadera por 1e3 (flotador 1000). La diferencia es significativa, si desea obtener resultados precisos, cambié mi respuesta. La diferencia resulta del comportamiento predeterminado de Python 2.x, que siempre devuelve int al dividir (usando / operador) int por int (se llama división de piso). Al reemplazar el divisor 1000 (siendo un int) con el 1e3 divisor (siendo representación de 1000 como flotador) o con float(1000) (o 1000. etc.), la división se convierte en división verdadera. Vuelve Python 2.x 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 a fromtimestamp() método, el resultado de este método también contiene información sobre esa parte fraccionaria (como el número de microsegundos).

  • usa la división verdadera: / 1e3

    – jfs

    16 mar. 12 a las 21:42

  • @JFSebastian: Tienes toda la razón, edité mi respuesta y agregué una explicación de por qué tienes razón. Si no está de acuerdo con la explicación, hágamelo saber.

    – Tadeck

    16 mar. 12 a las 22:06

  • @manu-fatto: Eso realmente no importa. x * 0.001 y x / 1e3 son iguales, la diferencia está en la notación y la longitud (el original es más corto). Para algunas personas puede ser más claro dividir por el número en lugar de multiplicar por el multiplicación inversa número (1/x), que usted propuso. Pero gracias por proponer un enfoque alternativo.

    – Tadeck

    06 nov.

  • Esta función es peligrosa, porque tiene en cuenta tu zona horaria. Intente buscar utcfromtimestamp

    –Haim Bender

    02 ene.

  • @HaimBender ¡Gracias! Siento que sus comentarios merecen más atenciones. fromtimestamp darte la fecha y hora en hora local utcfromtimestamp le da la fecha y la hora en UTC.

    – yusong

    04 dic. 16 en 17:49


Como alternativa, puede utilizar pandas.to_datetime y elige las unidades por ti mismo junto con la zona horaria. Eso evita todos los comentarios y problemas mencionados en la respuesta anterior:

import pandas as pd

pd.to_datetime(int('1331856000000'), utc=True, unit="ms")
# Timestamp('2012-03-16 00:00:00+0000', tz='UTC')

.

¿Ha sido útil esta solución?