Wie kann ich in Python die aktuelle Zeit in Millisekunden abrufen?
Für das, was ich brauchte, habe ich basierend auf dem obigen Kommentar von @samplebias Folgendes getan:
import time
millis = int(round(time.time() * 1000))
print millis
Schnell und einfach. Danke an alle, sorry für den Hirnfurz.
Zur Wiederverwendung:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
Dann:
>>> current_milli_time()
1378761833768
time.time()
gibt die Auflösung möglicherweise nur für die Sekunde an. 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)
eine andere Lösung ist die Funktion, die Sie in Ihre eigenen utils.py einbetten können
import time as time_ #make sure we don't override time
def millis():
return int(round(time_.time() * 1000))
Einfach Beispielcode:
import time
timestamp = int(time.time()*1000.0)
Ausgabe: 1534343781311
Ab Version 3.7 können Sie time.time_ns()
verwenden, um die Zeit in Nanosekunden von Epoch zu erhalten. Also kannst du es tun
ms = time.time_ns() // 1000000
um die 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
Der einfachste Weg, die aktuelle UTC-Zeit in Millisekunden zu ermitteln, ist:
# timeutil.py
import datetime
def get_epochtime_ms():
return round(datetime.datetime.utcnow().timestamp() * 1000)
# sample.py
import timeutil
timeutil.get_epochtime_ms()
Diese Multiplikationen auf 1000 für Millisekunden können angemessen sein, um eine bestimmte Voraussetzung zu lösen oder akzeptabel zu machen. Es könnte verwendet werden, um eine Lücke in Ihrer Datenbank zu füllen, die es nicht wirklich jemals nutzt. In realen Situationen, in denen ein genaues Timing erforderlich ist, würde dies jedoch letztendlich scheitern. Ich würde niemandem empfehlen, diese Methode für unternehmenskritische Vorgänge zu verwenden, für die Aktionen oder die Verarbeitung zu bestimmten Zeitpunkten erforderlich sind.
Zum Beispiel: Round-Trip-Pings von 30-80 ms in den USA ... Das konnte man nicht einfach aufrunden und effizient nutzen.
Mein eigenes Beispiel erfordert Aufgaben in jeder Sekunde, was bedeutet, dass, wenn ich nach der Beantwortung der ersten Aufgaben aufrunde, immer noch die Verarbeitungszeit multipliziert mit jedem Hauptschleifenzyklus anfällt. Dies wurde alle 60 Sekunden zu einem Gesamtfunktionsaufruf. Das ist ~ 1440 pro Tag .. nicht zu genau.
Nur ein Gedanke für Leute, die nach einer genaueren Argumentation suchen, die über das Lösen einer Datenbanklücke hinausgeht und diese nie wirklich ausnutzt.