Python'da geçerli saati nasıl milisaniye olarak alabilirim?
time.time()
olduğundan daha kötü bir hassasiyet sağlayabilir datetime.utcnow()
.
Python'da geçerli saati nasıl milisaniye olarak alabilirim?
time.time()
olduğundan daha kötü bir hassasiyet sağlayabilir datetime.utcnow()
.
Yanıtlar:
İhtiyacım olan şey için, yukarıdaki @samplebias'ın yorumuna dayanarak yaptığım şey:
import time
millis = int(round(time.time() * 1000))
print millis
Quick'n'easy. Hepinize teşekkürler, beyin osuruğu için üzgünüm.
Yeniden kullanım için:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
Sonra:
>>> current_milli_time()
1378761833768
round
? Bu int(time.time() * 1000)
yeterli mi?
.utcnow()
kullanırGetSystemTimeAsFileTime()
. Olmaz time.clock()
(call QueryPerformanceCounter()
daha gürültüsü düşürebilir daha tanıtmak)? Bkz. Hassasiyet, doğruluk ile aynı değildir .
time.time()
sadece ikinciye çözünürlük verebilir, milisaniye için tercih edilen yaklaşımdır 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()
(muhtemelen) daha iyi hassasiyet üretmek için formülü satır içine alabilirsiniz : (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3
(gerçek bölüm etkinken) Veya milisaniyeyi kısaltmak istiyorsanız, kullanın // 10**3
.
Gönderen 3.7 sürümüne kullanabilirsiniz time.time_ns()
dönemin geçirilen nano saniye olarak zaman alır. Böylece yapabilirsin
ms = time.time_ns() // 1000000
tamsayı olarak mili saniye cinsinden zaman elde etmek.
Kodunuzda milisaniyeyi datetime ile döndüren basit bir yöntem istiyorsanız:
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
düşünün , UNIX zaman damgası = datetime (1970,1,1)
.utcnow()
Bunun yerine kullanın veya mutlak zamana ihtiyacınız yoksa kullanabilirsiniz time.monotonous()
. Not: gerçek bölme etkinleştirilmiş some_int + dt.microseconds/ 1000.0
formül ( ) / 10**3
ile kayan nokta aritmetiği arasında küçük bir fark vardır . Bkz açık formülü ve ilgili bağlantıyı total_seconds()
ilgili yanıtında
Geçen süreyi ölçmekten endişe ediyorsanız, monoton saati kullanmalısınız (python 3) . Bu saat, örneğin bir NTP sorgusunun sistem saatinizi ayarlayıp ayarlamadığını gördüğünüz gibi sistem saati güncellemelerinden etkilenmez.
>>> import time
>>> millis = round(time.monotonic() * 1000)
Geçen süreyi ölçmek için daha sonra karşılaştırmak için kullanılabilecek saniye cinsinden bir referans süresi sağlar.
Kodumu kullanırsanız (aşağıda) süre saniye cinsinden, daha sonra ondalık bir milisaniyeden sonra görünür. Windows ve Unix arasında bir fark olduğunu düşünüyorum - varsa yorum yapın.
from time import time
x = time()
print(x)
Sonucum (Windows'ta):
1576095264.2682993
EDIT : Hiçbir fark yok :) Teşekkürler tc0nn
/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
python3 scratch.py 1577212763.9136133
Milisaniye için 1000'e kadar olan bu çarpımlar, bazı önkoşulları çözmek veya kabul etmek için uygun olabilir. Veritabanınızdaki gerçekten hiç kullanmayan bir boşluğu doldurmak için kullanılabilir. Bununla birlikte, kesin zamanlama gerektiren gerçek durumlar için sonuçta başarısız olur. Kimsenin eylemleri veya belirli zamanlamalarda işlem gerektiren kritik işlemler için bu yöntemi kullanmasını önermem.
Örneğin: ABD'de gidiş-dönüş pingler 30-80 ms'dir ... Bunu yuvarlayıp verimli bir şekilde kullanamazsınız.
Kendi örneğim her saniye görev gerektirir, yani ilk görevler yanıtlandıktan sonra yuvarlanırsam, işlem döngüsünün her ana döngü döngüsüyle çarpılacağı anlamına gelir. Bu, her 60 saniyede bir toplam işlev çağrısı oldu. Bu günde ~ 1440 .. çok doğru değil.
Sadece gerçekten kullanmayan bir veritabanı boşluğunu çözmenin ötesinde daha doğru bir akıl yürütme arayan insanlar için bir düşünce.
import time; ms = time.time()*1000.0