web-dev-qa-db-fra.com

Comment convertir un horodatage entier en Python datetime

J'ai un fichier de données contenant des horodatages tels que "1331856000000". Malheureusement, je n'ai pas beaucoup de documentation sur le format, je ne suis donc pas sûr de savoir comment l'horodatage est formaté. J'ai essayé les standards datetime.fromordinal() et datetime.fromtimestamp() de Python et quelques autres, mais rien ne correspond. Je suis à peu près sûr que ce nombre correspond à la date du jour (par exemple, 2012-3-16), mais pas beaucoup plus.

Comment convertir ce nombre en datetime?

153
Cerin

datetime.datetime.fromtimestamp() est correct, sauf que vous avez probablement un horodatage exprimé en millisecondes (comme dans JavaScript), mais fromtimestamp() s'attend à un horodatage Unix, en secondes.

Faites-le comme ça:

>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)

et le résultat est:

>>> date
datetime.datetime(2012, 3, 16, 1, 0)

Répond-il à votre question?

EDIT: JF Sebastian a correctement suggéré de utiliser la vraie division par 1e3 (float 1000). La différence est importante, si vous souhaitez obtenir des résultats précis, j'ai donc changé ma réponse. La différence résulte du comportement par défaut de Python 2.x, qui renvoie toujours int lors de la division (à l'aide de l'opérateur /) int par int ( c'est ce qu'on appelle division de l'étage ). En remplaçant le diviseur 1000 (étant un int) par le diviseur 1e3 (étant la représentation de 1000 sous forme de float) ou par float(1000) (ou 1000. etc.). ), la division devient vraie division . Python 2.x renvoie float lors de la division de int par float, float par int, float par float etc. Et quand une partie décimale de l'horodatage est passée à la méthode fromtimestamp(), le résultat de cette méthode contient également des informations sur cette partie décimale (en nombre de microsecondes).

275
Tadeck