web-dev-qa-db-fra.com

Conversion de python datetime en horodatage en millisecondes

Comment convertir une heure lisible par l'homme au format 20.12.2016 09:38:42,76 en horodatage Unix dans millisecondes? J'ai trouvé beaucoup de questions similaires, mais je n'ai pas trouvé cette question/réponse spécifique.

28
Tom

En Python 3, cela peut être fait en 2 étapes:

  1. Conversion de timestring en objet datetime
  2. Multipliez l'horodatage de l'objet datetime par 1000 pour le convertir en millisecondes.

Par exemple comme ceci:

from datetime import datetime

dt_obj = datetime.strptime('20.12.2016 09:38:42,76',
                           '%d.%m.%Y %H:%M:%S,%f')
millisec = dt_obj.timestamp() * 1000

print(millisec)

Sortie:

1482223122760.0

strptime accepte votre timestring et une chaîne de format en entrée. La chaîne d'horodatage (premier argument) spécifie le type que vous souhaitez convertir en un objet datetime. La chaîne de format (second argument) spécifie le format actuel de la chaîne que vous avez transmise.

Voici l'explication des spécificateurs de format de documentation officielle :

  • %d - Jour du mois sous forme de nombre décimal complété à zéro.
  • %m - Mois sous la forme d'un nombre décimal complété à zéro.
  • %Y - Année avec siècle sous forme décimale
  • %H - Heure (horloge sur 24 heures) sous forme de nombre décimal complété à zéro.
  • %M - Minute sous la forme d'un nombre décimal complété à zéro.
  • %S - Deuxième sous forme de nombre décimal complété à zéro.
  • %f - La microseconde sous forme de nombre décimal, complétée par un zéro à gauche.
37
Milo

Pour Python2.7 - modification de la réponse de MYGz pour ne pas supprimer les millisecondes:

from datetime import datetime

d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s.%f')
d_in_ms = int(float(d)*1000)
print(d_in_ms)

print(datetime.fromtimestamp(float(d)))

Sortie:

1482248322760
2016-12-20 09:38:42.760000
9
Matthew Cox

Vous devez analyser votre format de temps en utilisant strptime .

>>> import time
>>> from datetime import datetime
>>> ts, ms = '20.12.2016 09:38:42,76'.split(',')
>>> ts
'20.12.2016 09:38:42'
>>> ms
'76'
>>> dt = datetime.strptime(ts, '%d.%m.%Y %H:%M:%S')
>>> time.mktime(dt.timetuple())*1000 + int(ms)*10
1482223122760.0
7
Maurice Meyer

Pour Python2.7

Vous pouvez le formater en secondes, puis le multiplier par 1 000 pour le convertir en millisecondes.

from datetime import datetime

d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s')
d_in_ms = int(d)*1000
print(d_in_ms)

print(datetime.fromtimestamp(float(d)))

Sortie:

1482206922000
2016-12-20 09:38:42
4
MYGz

Pour ceux qui recherchent une réponse sans analyser ni perdre des millisecondes, étant donné dt_obj est un datetime:

python3 seulement, élégant

int(dt_obj.timestamp() * 1000)

compatible python2 et python3:

import time

int(time.mktime(dt_obj.utctimetuple()) * 1000 + dt_obj.microsecond / 1000)
0
Ivan Klass