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
?
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).