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.
En Python 3, cela peut être fait en 2 étapes:
datetime
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.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
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
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
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)