web-dev-qa-db-fra.com

Comment puis-je créer un horodatage Python avec une granularité en millisecondes?

J'ai besoin d'un seul horodatage de millisecondes (ms) depuis Epoch. Cela ne devrait pas être difficile, je suis sûr qu'il me manque juste une méthode de datetime ou quelque chose de similaire.

En fait, la granularité en microsecondes (µs) est également très bien. J'ai juste besoin d'un timing inférieur à 1/10 de seconde.

Exemple. J'ai un événement qui se produit toutes les 750 ms, disons qu'il vérifie si une lumière est allumée ou éteinte. Je dois enregistrer chaque contrôle et résultat et le réviser plus tard, donc mon journal doit ressembler à ceci:

...00250 Light is on
...01000 Light is off
...01750 Light is on
...02500 Light is on

Si je n'ai qu'une seconde granularité complète, mon journal ressemblerait à ceci:

...00 Light is on
...01 Light is off
...01 Light is on
...02 Light is on

Pas assez précis.

25
Skip Huffman
import time
time.time() * 1000

où 1000 est des millisecondes par seconde. Si tout ce que vous voulez, c'est des centièmes de seconde depuis l'Époque, multipliez par 100.

37
nmichaels

En Python, datetime.now() peut produire une valeur avec plus de précision que time.time():

from datetime import datetime, timezone, timedelta

now = datetime.now(timezone.utc)
Epoch = datetime(1970, 1, 1, tzinfo=timezone.utc) # use POSIX Epoch
posix_timestamp_micros = (now - Epoch) // timedelta(microseconds=1)
posix_timestamp_millis = posix_timestamp_micros // 1000 # or `/ 1e3` for float

En théorie, time.gmtime(0) (l'époque utilisée par time.time()) peut être différente de 1970.

8
jfs