Comment créer une date / heure en Python à partir de millisecondes?


142

Je peux créer un objet Date similaire en Java par java.util.Date (millisecondes) . Comment créer le comparable en Python?

Alloue un objet Date et l'initialise pour représenter le nombre de millisecondes spécifié depuis l'heure de base standard connue sous le nom de «l'époque», à savoir le 1er janvier 1970 à 00:00:00 GMT.

Réponses:


215

Convertissez-le simplement en horodatage

datetime.datetime.fromtimestamp(ms/1000.0)

17
Une note - dans Python 3, (/) effectuera une division en virgule flottante. Pour effectuer une division intégrale, utilisez (//).
John Millikin le

3
Vous ne voulez pas vraiment de division de flotteurs de toute façon? Sinon, vous perdez toute précision inférieure à 1 seconde (tenue dans la partie fractionnaire de l'horodatage). Mieux vaut utiliser ms / 1000.0 sans troncature.
Brian le

4
Cependant, datetime le prend toujours en charge? Si nous avons une précision inférieure à la seconde, il semble mal de la jeter. Sinon, il n'y a pas de mal - nous conservons simplement cette précision originale.
Brian le

30
Pour garder la précision sans utiliser de flotteurs, vous pouvez également faire:datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
tsg

2
un autre problème avec cette solution: "fromtimestamp () peut déclencher ValueError, si l'horodatage est hors de la plage de valeurs supportées par les fonctions de la plate-forme C localtime () ou gmtime (). Il est courant que cela soit limité aux années de 1970 à 2038. " - combien de temps votre code devrait-il durer ???
mike rodent

12

Et ça? Je suppose qu'il peut être compté pour traiter des dates avant 1970 et après 2038.

target_date_time_ms = 200000 # or whatever
base_datetime = datetime.datetime( 1970, 1, 1 )
delta = datetime.timedelta( 0, 0, 0, target_date_time_ms )
target_date = base_datetime + delta

comme mentionné dans la bibliothèque standard Python:

fromtimestamp () peut déclencher ValueError, si l'horodatage est hors de la plage de valeurs supportées par les fonctions de la plateforme C localtime () ou gmtime (). Il est courant que cela soit limité aux années de 1970 à 2038.


6
vous pourriez utiliserutc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
jfs

9

Peu lourd à cause de l'utilisation de pandas mais fonctionne:

import pandas as pd
pd.to_datetime(msec_from_java, unit='ms').to_pydatetime()

2
import pandas as pd

Date_Time = pd.to_datetime(df.NameOfColumn, unit='ms')
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.