Saya dapat mengurai string yang berisi tanggal / waktu dengan time.strptime
>>> import time
>>> time.strptime('30/03/09 16:31:32', '%d/%m/%y %H:%M:%S')
(2009, 3, 30, 16, 31, 32, 0, 89, -1)
Bagaimana saya bisa menguraikan string waktu yang berisi milidetik?
>>> time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/_strptime.py", line 333, in strptime
data_string[found.end():])
ValueError: unconverted data remains: .123
python
date
time
datetime-parsing
ilkinulas
sumber
sumber
%f
.%f
diisi dengan nol di sebelah kanan (bukan kiri!) Ke 6 tempat desimal. 1 diurai menjadi 100000, 12 diurai ke 120000, dan 1234567 menghasilkanValueError: unconverted data remains: 7
Saya tahu ini adalah pertanyaan yang lebih lama tetapi saya masih menggunakan Python 2.4.3 dan saya perlu menemukan cara yang lebih baik untuk mengubah string data ke datetime.
Solusi jika datetime tidak mendukung% f dan tanpa perlu mencoba / kecuali adalah:
Ini berfungsi untuk string input "2010-10-06 09: 42: 52.266000"
sumber
dt.replace(microsecond=int(mSecs))
Untuk memberikan kode yang mengacu pada jawaban nstehr (dari sumbernya ):
sumber
Jawaban DNS di atas sebenarnya salah. SO bertanya tentang milidetik tetapi jawabannya adalah untuk mikrodetik. Sayangnya, Python `s tidak memiliki arahan untuk milidetik, hanya mikrodetik (lihat doc ), tetapi Anda bisa mengatasinya dengan menambahkan tiga nol di akhir string dan menguraikan string sebagai mikrodetik, sesuatu seperti:
di mana
time_str
diformat seperti30/03/09 16:31:32.123
.Semoga ini membantu.
sumber
.123
ditafsirkan dengan benar sebagai 123.000 mikrodetikPikiran pertama saya adalah mencoba melewatinya '30 / 03/09 16: 31: 32.123 '(dengan titik bukannya titik dua antara detik dan milidetik.) Tapi itu tidak berhasil. Pandangan sekilas ke dokumen menunjukkan bahwa detik fraksional diabaikan dalam hal apa pun ...
Ah, perbedaan versi. Ini dilaporkan sebagai bug dan sekarang di 2.6+ Anda dapat menggunakan "% S.% f" untuk menguraikannya.
sumber
dari milis python: parsing thread milidetik . Ada fungsi yang diposting di sana yang tampaknya menyelesaikan pekerjaan, meskipun seperti yang disebutkan dalam komentar penulis itu adalah jenis peretasan. Ini menggunakan ekspresi reguler untuk menangani pengecualian yang muncul, dan kemudian melakukan beberapa perhitungan.
Anda juga dapat mencoba melakukan ekspresi dan perhitungan reguler di depan, sebelum meneruskannya ke strptime.
sumber
Untuk python 2 saya melakukan ini
ia mencetak waktu "% H:% M:% S", membagi time.time () menjadi dua substring (sebelum dan sesudah.) xxxxxxx.xx dan karena .xx adalah milidetik saya, saya menambahkan substring kedua ke ""% saya. H:% M:% S "
harap masuk akal :) Contoh output:
13: 31: 21.81 AKHIR BLINK 01
13: 31: 26.3 Berkedip 01
13: 31: 26.39 AKHIR BLINK 01
13: 31: 34.65 Memulai Jalur 01
sumber