Wie kann ich die aktuelle Zeit in Millisekunden in Python abrufen?
time.time()
bietet möglicherweise eine schlechtere Genauigkeit als datetime.utcnow()
auf einigen Plattformen und Python-Versionen.
Wie kann ich die aktuelle Zeit in Millisekunden in Python abrufen?
time.time()
bietet möglicherweise eine schlechtere Genauigkeit als datetime.utcnow()
auf einigen Plattformen und Python-Versionen.
Antworten:
Für das, was ich brauchte, habe ich Folgendes getan, basierend auf dem obigen Kommentar von @samplebias:
import time
millis = int(round(time.time() * 1000))
print millis
Schnell und einfach. Vielen Dank an alle, Entschuldigung für den Hirnfurz.
Zur Wiederverwendung:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
Dann:
>>> current_milli_time()
1378761833768
round
? Es scheint int(time.time() * 1000)
genug zu sein?
.utcnow()
Anwendungen GetSystemTimeAsFileTime()
auf den letzten CPython unter Windows . Würde time.clock()
call ( QueryPerformanceCounter()
) nicht mehr Rauschen verursachen, als es reduzieren könnte? Siehe Präzision ist nicht gleich Genauigkeit .
time.time()
kann nur die Sekunde auflösen, der bevorzugte Ansatz für Millisekunden ist datetime
.
from datetime import datetime
dt = datetime.now()
dt.microsecond
def TimestampMillisec64():
return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000)
.total_seconds()
, um (möglicherweise) eine bessere Genauigkeit zu erzielen: (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3
(mit aktivierter wahrer Division) Oder wenn Sie die Millisekunden abschneiden möchten, verwenden Sie // 10**3
.
Ab Version 3.7 können Sie die time.time_ns()
Zeit als vergangene Nanosekunden aus der Epoche abrufen. So können Sie tun
ms = time.time_ns() // 1000000
Zeit in Millisekunden als Ganzzahl zu erhalten.
Wenn Sie eine einfache Methode in Ihrem Code wünschen, die die Millisekunden mit datetime zurückgibt:
from datetime import datetime
from datetime import timedelta
start_time = datetime.now()
# returns the elapsed milliseconds since the start of the program
def millis():
dt = datetime.now() - start_time
ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
return ms
start_time
Wenn Sie darüber nachdenken , wäre der UNIX-Zeitstempel Ihre Methode mit = datetime (1970,1,1)
.utcnow()
stattdessen oder wenn Sie nicht die absolute Zeit benötigen, können Sie verwenden time.monotonous()
. Hinweis: Aufgrund der Gleitkomma-Arithmetik zwischen some_int + dt.microseconds/ 1000.0
und der Formel ( ) / 10**3
mit aktivierter wahrer Division gibt es einen geringfügigen Unterschied . Siehe die explizite Formel und den Link für total_seconds()
in der entsprechenden Antwort
Wenn Sie Bedenken haben, die verstrichene Zeit zu messen, sollten Sie die monotone Uhr (Python 3) verwenden . Diese Uhr wird nicht von Systemuhraktualisierungen beeinflusst, wie Sie beispielsweise sehen würden, wenn eine NTP-Abfrage Ihre Systemzeit anpasst.
>>> import time
>>> millis = round(time.monotonic() * 1000)
Es gibt eine Referenzzeit in Sekunden an, die zum späteren Vergleichen zur Messung der verstrichenen Zeit verwendet werden kann.
Wenn Sie meinen Code (unten) verwenden, wird die Zeit in Sekunden und nach einer Dezimalstelle in Millisekunden angezeigt. Ich denke, dass es einen Unterschied zwischen Windows und Unix gibt - bitte kommentieren Sie, wenn es einen gibt.
from time import time
x = time()
print(x)
Mein Ergebnis (unter Windows) war:
1576095264.2682993
EDIT : Es gibt keinen Unterschied :) Danke tc0nn
/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
python3 scratch.py 1577212763.9136133
Diese Multiplikationen auf 1000 für Millisekunden können zum Lösen oder Akzeptieren einer bestimmten Voraussetzung angemessen sein. Es könnte verwendet werden, um eine Lücke in Ihrer Datenbank zu füllen, die es nie wirklich benutzt. In realen Situationen, in denen ein genaues Timing erforderlich ist, würde dies jedoch letztendlich fehlschlagen. Ich würde niemandem empfehlen, diese Methode für geschäftskritische Operationen zu verwenden, für die Aktionen erforderlich sind, oder für die Verarbeitung zu bestimmten Zeitpunkten.
Zum Beispiel: Round-Trip-Pings sind in den USA 30-80 ms lang ... Sie können das nicht einfach aufrunden und effizient nutzen.
In meinem eigenen Beispiel sind Aufgaben pro Sekunde erforderlich. Wenn ich also nach der Beantwortung der ersten Aufgaben aufrunde, entsteht immer noch die Verarbeitungszeit multipliziert mit jedem Hauptschleifenzyklus. Dies war schließlich ein Gesamtfunktionsaufruf alle 60 Sekunden. das ist ~ 1440 pro Tag .. nicht zu genau.
Nur ein Gedanke für Leute, die nach genaueren Argumenten suchen, die über das Lösen einer Datenbanklücke hinausgehen, die sie nie wirklich nutzt.
import time; ms = time.time()*1000.0