639 votes

Obtenir l'heure actuelle en millisecondes en Python ?

Comment puis-je obtenir l'heure actuelle en millisecondes en Python ?

79 votes

import time; ms = time.time()*1000.0

4 votes

@samplebias : time.time() peut fournir une moins bonne précision que datetime.utcnow() sur certaines plateformes et versions de python.

7 votes

En millisecondes depuis quand ? Si vous voulez dire depuis l'époque (minuit le 1er janvier 1970 UTC), voir ceci : stackoverflow.com/questions/18169099/

858voto

Naftuli Tzvi Kay Points 10493

Utilisation de time.time() :

import time

def current_milli_time():
    return round(time.time() * 1000)

Ensuite :

>>> current_milli_time()
1378761833768

50 votes

Cela peut ne pas donner la bonne réponse. Selon la documentation, "Notez que même si l'heure est toujours renvoyée sous forme de nombre à virgule flottante, tous les systèmes ne fournissent pas l'heure avec une précision supérieure à 1 seconde".

16 votes

Je me demande, pourquoi tu as besoin de round ? Il semble que int(time.time() * 1000) est suffisant ?

17 votes

IMO j'utiliserais floor et non round, mais c'est juste moi. Si quelqu'un demande quelle est l'heure, et qu'il est 7:32, le chiffre qu'il veut probablement est 7, pas 8.

96voto

Jason Points 942

time.time() ne peut donner une résolution qu'à la seconde, l'approche préférée pour les millisecondes est la suivante datetime .

from datetime import datetime
dt = datetime.now()
dt.microsecond

131 votes

Pas tout à fait utile - cela vous donne seulement les microsecondes sur le dt's second. voir stackoverflow.com/a/1905423/74632

9 votes

+1 car c'est la manière officielle d'obtenir un horodatage fiable du système.

0 votes

En fait, la question porte sur les millisecondes plutôt que sur les microsecondes, ce qui n'est pas si facile

56voto

user3324131 Points 31
def TimestampMillisec64():
    return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000)

3 votes

Vous pourriez mettre en ligne la formule pour .total_seconds() pour produire (éventuellement) une meilleure précision : (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3 (avec la division réelle activée) Ou si vous voulez tronquer les millisecondes, utilisez alors // 10**3 .

1 votes

Ceci semble être la meilleure réponse si vous utilisez des dates.

0 votes

Si vous présentez cela comme une solution python multiplateforme, avez-vous l'assurance que toutes les plateformes et toutes les versions 3+ de python tiendront correctement compte des secondes intercalaires passées dans ce qui est renvoyé par datetime.datetime.utcnow(), ou y a-t-il des difficultés cachées avec cette solution multiplateforme cohérente ?

12voto

Sam Dodrill Points 68

Une autre solution est la fonction que vous pouvez incorporer dans votre propre utils.py

import time as time_ #make sure we don't override time
def millis():
    return int(round(time_.time() * 1000))

6voto

bacchus Points 2527

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X