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.

Joshua
la source

Réponses:

215

Convertissez-le simplement en horodatage

datetime.datetime.fromtimestamp(ms/1000.0)
vartec
la source
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.

Mike rongeur
la source
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()
mde
la source
2
import pandas as pd

Date_Time = pd.to_datetime(df.NameOfColumn, unit='ms')
Artem Krylov
la source