Come posso ottenere l'ora corrente in millisecondi in Python?
time.time()
potrebbe fornire una precisione peggiore rispetto datetime.utcnow()
ad alcune piattaforme e versioni di Python.
Come posso ottenere l'ora corrente in millisecondi in Python?
time.time()
potrebbe fornire una precisione peggiore rispetto datetime.utcnow()
ad alcune piattaforme e versioni di Python.
Risposte:
Per quello che mi serviva, ecco cosa ho fatto, basandomi sul commento di @samplebias sopra:
import time
millis = int(round(time.time() * 1000))
print millis
Quick'n'easy. Grazie a tutti, scusate la scoreggia cerebrale.
Per il riutilizzo:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
Poi:
>>> current_milli_time()
1378761833768
round
? Sembra int(time.time() * 1000)
abbastanza?
.utcnow()
utilizza GetSystemTimeAsFileTime()
su CPython recente su Windows . Non sarebbe time.clock()
chiamare ( QueryPerformanceCounter()
) introdurre più rumore di quanto potrebbe ridurre? Vedi La precisione non è la stessa della precisione .
time.time()
può solo dare una soluzione al secondo, l'approccio preferito per i millisecondi è 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()
produrre (possibilmente) una migliore precisione: (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3
(con la vera divisione abilitata) O se vuoi troncare i millisecondi, usa // 10**3
.
Dalla versione 3.7 è possibile utilizzare time.time_ns()
per ottenere il tempo trascorso nano secondi dall'epoca. Quindi puoi farlo
ms = time.time_ns() // 1000000
per ottenere il tempo in mili-secondi come numero intero.
Se si desidera un metodo semplice nel codice che restituisca i millisecondi con datetime:
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
= datetime (1970,1,1)
.utcnow()
invece o se non è necessario il tempo assoluto, quindi è possibile utilizzare time.monotonous()
. Nota: c'è una sottile differenza dovuta all'aritmetica in virgola mobile tra some_int + dt.microseconds/ 1000.0
e la formula ( ) / 10**3
con la divisione vera abilitata. Vedi la formula esplicita e il link per total_seconds()
nella relativa risposta
Se sei preoccupato di misurare il tempo trascorso, dovresti usare l' orologio monotonico (python 3) . Questo orologio non è influenzato dagli aggiornamenti dell'orologio di sistema come vedresti se, ad esempio, una query NTP aggiusta l'ora di sistema.
>>> import time
>>> millis = round(time.monotonic() * 1000)
Fornisce un tempo di riferimento in secondi che può essere utilizzato per confrontare in seguito per misurare il tempo trascorso.
Se usi il mio codice (sotto), il tempo apparirà in secondi, quindi, dopo un decimale, millisecondi. Penso che ci sia una differenza tra Windows e Unix - per favore commenta se c'è.
from time import time
x = time()
print(x)
il mio risultato (su Windows) è stato:
1576095264.2682993
EDIT : Non c'è differenza :) Grazie tc0nn
/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
python3 scratch.py 1577212763.9136133
Queste moltiplicazioni a 1000 per millisecondi possono essere decenti per risolvere o rendere accettabili alcuni prerequisiti. Potrebbe essere utilizzato per colmare una lacuna nel database che non lo utilizza mai. Anche se, per situazioni reali che richiedono un tempismo preciso, alla fine fallirebbe. Non consiglierei a nessuno di usare questo metodo per operazioni mission-critical che richiedono azioni o elaborazioni a tempi specifici.
Ad esempio: ping di andata e ritorno di 30-80 ms negli Stati Uniti ... Non si può semplicemente arrotondare per eccesso e usarlo in modo efficiente.
Il mio esempio richiede attività ad ogni secondo, il che significa che se arrotondassi dopo la risposta delle prime attività continuerei a sostenere il tempo di elaborazione moltiplicato per ogni ciclo di ciclo principale. Questo finiva per essere una chiamata di funzione totale ogni 60 secondi. questo è ~ 1440 al giorno .. non troppo preciso.
Solo un pensiero per le persone che cercano un ragionamento più accurato oltre a risolvere un gap del database che non lo utilizza mai realmente.
import time; ms = time.time()*1000.0