Ini mungkin tidak memberikan jawaban yang benar. Menurut dokumen, "Perhatikan bahwa meskipun waktu selalu dikembalikan sebagai angka floating point, tidak semua sistem menyediakan waktu dengan ketepatan yang lebih baik daripada 1 detik"
Jason Polites
11
Saya bertanya-tanya, mengapa Anda perlu melakukannya round? Sepertinya int(time.time() * 1000)sudah cukup?
Maxim Vladimirsky
14
Saya akan menggunakan lantai dan tidak bulat, tapi itu hanya saya. Jika seseorang bertanya jam berapa, dan jam 7:32, jumlah yang mereka inginkan adalah jam 7, bukan jam 8.
@ MaximVladimirsky Itu bukan perilaku int (). Int tidak memberi nilai pada lantai, ia membulat ke nol. Yang merupakan hal yang sama untuk angka positif, tetapi sebaliknya untuk negatif. int (1.5) memberi 1, int (-1.5) memberi -1, math.floor (-1.5) memberi -2 Lihat: docs.python.org/2/library/stdtypes.html
Skip Huffman
91
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
+1 karena ini adalah cara resmi untuk mendapatkan cap waktu yang andal dari sistem.
Pascal
16
-1. ini jawaban yang salah untuk pertanyaan ini. seperti yang dikomentari @Boris, ini tidak memberikan "waktu dalam mikrodetik", misalnya tidak termasuk hari, jam, detik dalam jumlah mikrodetik.
ja
3
+1 Ini memberikan nilai yang benar dan aritmatika dapat dianggap berhasil karena matematika. Jika pengguna membutuhkan waktu saat ini dalam milidetik / mikrodetik, aritmatika sederhana akan mendapatkannya di sana. Jika diperlukan waktu delta - yang tidak diminta - aritmatika, sekali lagi, hematlah hari itu.
Jack Stout
3
Memberikan mikrodetik waktu saat ini, bukan seluruh cap waktu.
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 programdef millis():
dt = datetime.now()- start_time
ms =(dt.days *24*60*60+ dt.seconds)*1000+ dt.microseconds /1000.0return ms
ini adalah perbedaan antara dua kali dalam milidetik, menggabungkan metode Anda dengan jawaban @Jason memberi cap waktu saat ini dalam milidetik ... Berpikir tentang itu, cap waktu UNIX akan menjadi metode Anda dengan start_time= datetime (1970,1,1)
PR
waktu lokal mungkin ambigu dan tidak monoton (karena transisi DST atau alasan lain untuk mengubah offset utc lokal). Gunakan .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.0dan formula ( ) / 10**3dengan pembagian yang benar diaktifkan. Lihat rumus eksplisit dan tautannya total_seconds()dalam jawaban terkait
jfs
7
Cara paling sederhana yang saya temukan untuk mendapatkan waktu UTC saat ini dalam milidetik adalah:
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.
Tidak ada perbedaan pada Mac OSX:/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
tc0nn
1
Tidak ada perbedaan pada Ubuntu 18:python3 scratch.py 1577212763.9136133
tc0nn
1
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
time.time()
mungkin memberikan presisi yang lebih buruk daripadadatetime.utcnow()
pada beberapa platform dan versi python.Jawaban:
Untuk apa yang saya butuhkan, inilah yang saya lakukan, berdasarkan komentar @samplebias di atas:
Cepat mudah. Terima kasih semua, maaf untuk kentut otak.
Untuk digunakan kembali:
Kemudian:
sumber
round
? Sepertinyaint(time.time() * 1000)
sudah cukup?.utcnow()
digunakanGetSystemTimeAsFileTime()
pada CPython terbaru di Windows . Tidakkahtime.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 adalahdatetime
.sumber
sumber
.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 melakukannyauntuk mendapatkan waktu dalam mili detik sebagai integer.
sumber
Hanya kode sampel:
Output: 1534343781311
sumber
solusi lain adalah fungsi yang dapat Anda embed ke dalam utils.py Anda sendiri
sumber
Jika Anda menginginkan metode sederhana dalam kode Anda yang mengembalikan milidetik dengan datetime:
sumber
start_time
= datetime (1970,1,1).utcnow()
sebagai gantinya atau jika Anda tidak membutuhkan waktu absolut maka Anda bisa menggunakannyatime.monotonous()
. Catatan: ada perbedaan halus karena aritmatika titik-mengambang antarasome_int + dt.microseconds/ 1000.0
dan formula( ) / 10**3
dengan pembagian yang benar diaktifkan. Lihat rumus eksplisit dan tautannyatotal_seconds()
dalam jawaban terkaitCara paling sederhana yang saya temukan untuk mendapatkan waktu UTC saat ini dalam milidetik adalah:
sumber
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.
Ini memberikan waktu referensi dalam detik yang dapat digunakan untuk membandingkan nanti untuk mengukur waktu yang berlalu.
sumber
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.
hasil saya (pada Windows) adalah:
EDIT : Tidak ada perbedaan :) Terima kasih tc0nn
sumber
/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.
sumber
Hanya solusi lain menggunakan
datetime
modul untuk Python 3.sumber