Bagaimana saya bisa mendapatkan waktu saat ini dalam milidetik dengan Python?
time.time()
mungkin memberikan presisi yang lebih buruk daripada datetime.utcnow()
pada beberapa platform dan versi python.
Bagaimana saya bisa mendapatkan waktu saat ini dalam milidetik dengan Python?
time.time()
mungkin memberikan presisi yang lebih buruk daripada datetime.utcnow()
pada beberapa platform dan versi python.
Jawaban:
Untuk apa yang saya butuhkan, inilah yang saya lakukan, berdasarkan komentar @samplebias di atas:
import time
millis = int(round(time.time() * 1000))
print millis
Cepat mudah. Terima kasih semua, maaf untuk kentut otak.
Untuk digunakan kembali:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
Kemudian:
>>> current_milli_time()
1378761833768
round
? Sepertinya int(time.time() * 1000)
sudah cukup?
.utcnow()
digunakan GetSystemTimeAsFileTime()
pada CPython terbaru di Windows . Tidakkah time.clock()
panggilan ( QueryPerformanceCounter()
) menimbulkan lebih banyak noise daripada yang mungkin dikurangi? Lihat Presisi tidak sama dengan akurasi .
time.time()
mungkin hanya memberikan resolusi untuk yang kedua, pendekatan yang lebih disukai untuk milidetik adalah 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()
menghasilkan (mungkin) presisi yang lebih baik: (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3
(dengan pembagian yang benar diaktifkan) Atau jika Anda ingin memotong milidetik kemudian gunakan // 10**3
.
Dari versi 3.7 Anda dapat menggunakan time.time_ns()
untuk mendapatkan waktu yang berlalu nano detik dari zaman. Jadi kamu bisa melakukannya
ms = time.time_ns() // 1000000
untuk mendapatkan waktu dalam mili detik sebagai integer.
Jika Anda menginginkan metode sederhana dalam kode Anda yang mengembalikan milidetik dengan 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()
sebagai gantinya atau jika Anda tidak membutuhkan waktu absolut maka Anda bisa menggunakannya time.monotonous()
. Catatan: ada perbedaan halus karena aritmatika titik-mengambang antara some_int + dt.microseconds/ 1000.0
dan formula ( ) / 10**3
dengan pembagian yang benar diaktifkan. Lihat rumus eksplisit dan tautannya total_seconds()
dalam jawaban terkait
Jika Anda khawatir tentang mengukur waktu yang telah berlalu, Anda harus menggunakan jam monoton (python 3) . Jam ini tidak terpengaruh oleh pembaruan jam sistem seperti yang Anda lihat jika kueri NTP menyesuaikan waktu sistem Anda, misalnya.
>>> import time
>>> millis = round(time.monotonic() * 1000)
Ini memberikan waktu referensi dalam detik yang dapat digunakan untuk membandingkan nanti untuk mengukur waktu yang berlalu.
Jika Anda menggunakan kode saya (di bawah), waktu akan muncul dalam detik, kemudian, setelah desimal, milidetik. Saya pikir ada perbedaan antara Windows dan Unix - tolong beri komentar jika ada.
from time import time
x = time()
print(x)
hasil saya (pada Windows) adalah:
1576095264.2682993
EDIT : Tidak ada perbedaan :) Terima kasih tc0nn
/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
python3 scratch.py 1577212763.9136133
Perkalian ini menjadi 1000 untuk milidetik mungkin layak untuk menyelesaikan atau membuat beberapa prasyarat dapat diterima. Ini dapat digunakan untuk mengisi celah di basis data Anda yang tidak benar-benar menggunakannya. Meskipun, untuk situasi nyata yang membutuhkan pengaturan waktu yang tepat, akhirnya akan gagal. Saya tidak akan menyarankan siapa pun menggunakan metode ini untuk operasi kritis misi yang memerlukan tindakan, atau pemrosesan pada waktu tertentu.
Sebagai contoh: ping pulang pergi menjadi 30-80 ms di Amerika Serikat ... Anda tidak bisa hanya menyimpulkannya dan menggunakannya secara efisien.
Contoh saya sendiri memerlukan tugas di setiap detik yang berarti jika saya mengumpulkan setelah tugas pertama merespons saya masih akan dikenakan waktu pemrosesan dikalikan setiap siklus loop utama. Ini akhirnya menjadi panggilan fungsi total setiap 60 detik. itu ~ 1440 sehari .. tidak terlalu akurat.
Hanya pemikiran untuk orang-orang yang mencari alasan yang lebih akurat di luar penyelesaian kesenjangan database yang tidak pernah benar-benar menggunakannya.
import time; ms = time.time()*1000.0