Saya memiliki dua kali, waktu mulai dan berhenti, dalam format 10:33:26 (HH: MM: SS). Saya perlu perbedaan antara dua kali. Saya telah mencari melalui dokumentasi untuk Python dan mencari online dan saya akan membayangkan itu ada hubungannya dengan datetime dan / atau modul waktu. Saya tidak bisa membuatnya berfungsi dengan baik dan terus menemukan hanya bagaimana melakukan ini ketika kencan terlibat.
Pada akhirnya, saya perlu menghitung rata-rata dari beberapa durasi waktu. Saya mendapat perbedaan waktu untuk bekerja dan saya menyimpannya dalam daftar. Sekarang saya perlu menghitung rata-rata. Saya menggunakan ekspresi reguler untuk memilah-milah waktu asli dan kemudian melakukan perbedaan.
Untuk rata-rata, haruskah saya mengonversi ke detik dan kemudian rata-rata?
sumber
Jawaban:
Ya, pasti
datetime
itulah yang Anda butuhkan di sini. Secara khusus,strptime
fungsi, yang mem-parsing string menjadi objek waktu.Itu membuat Anda
timedelta
objek yang berisi perbedaan antara dua kali. Anda dapat melakukan apa pun yang Anda inginkan dengan itu, mis. Mengubahnya menjadi detik atau menambahkannya ke yang laindatetime
.Ini akan mengembalikan hasil negatif jika waktu akhir lebih awal dari waktu mulai, misalnya
s1 = 12:00:00
dans2 = 05:00:00
. Jika Anda ingin kode untuk menganggap interval melintasi tengah malam dalam kasus ini (artinya harus menganggap waktu akhir tidak pernah lebih awal dari waktu mulai), Anda dapat menambahkan baris berikut ke kode di atas:(tentu saja Anda perlu memasukkan
from datetime import timedelta
suatu tempat). Terima kasih kepada JF Sebastian karena menunjukkan kasus penggunaan ini.sumber
days= -2
dan di atas dalam objek tdelta.days
tidak akan pernah bisa menjadi -2 atau kurang tanpa ada informasi tambahan (khususnya, tanggal) di luar apa yang dijelaskan dalam pertanyaan. Sehingga situasinya tidak relevan di sini.tdelta.total_seconds()
.Coba ini - efisien untuk menentukan waktu acara jangka pendek. Jika sesuatu memakan waktu lebih dari satu jam, maka tampilan akhir mungkin akan membutuhkan beberapa format ramah.
Perbedaan waktu dikembalikan sebagai jumlah detik yang berlalu.
sumber
time.monotonic()
dengan Python).time.time()
dapat mundur (mis., ketika waktu pada mesin berubah, termasuk koreksi NTP).Berikut adalah solusi yang mendukung menemukan perbedaan bahkan jika waktu akhir kurang dari waktu mulai (lebih dari interval tengah malam) seperti
23:55:00-00:25:00
(durasi setengah jam):Keluaran
time_diff()
mengembalikan objek timedelta yang dapat Anda lewati (sebagai bagian dari urutan) kemean()
fungsi langsung misalnya:The
mean()
Hasilnya jugatimedelta()
objek yang Anda dapat dikonversi ke detik (td.total_seconds()
metode (sejak Python 2,7)), jam (td / timedelta(hours=1)
(Python 3)), dllsumber
Struktur yang mewakili perbedaan waktu dalam Python disebut timedelta . Jika Anda memiliki
start_time
danend_time
sebagaidatetime
tipe, Anda dapat menghitung perbedaan menggunakan-
operator seperti:Anda harus melakukan ini sebelum mengonversi ke format string particualr (mis. sebelum start_time.strftime (...)). Jika Anda sudah memiliki representasi string, Anda perlu mengubahnya kembali ke waktu / datetime dengan menggunakan metode strptime .
sumber
Situs ini mengatakan untuk mencoba:
Forum ini menggunakan time.mktime ()
sumber
Saya suka bagaimana orang ini melakukannya - https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps . Tidak yakin apakah ada kontra.
Tapi terlihat rapi untuk saya :)
Mengenai pertanyaan Anda masih perlu menggunakan
datetime.strptime()
seperti orang lain katakan sebelumnya.sumber
Coba ini
OUTPUT:
sumber
hasil: 0 0 0 0 -47 -37
sumber
Keduanya
time
dandatetime
memiliki komponen tanggal.Biasanya jika Anda hanya berurusan dengan bagian waktu Anda akan memberikan tanggal default. Jika Anda hanya tertarik pada perbedaan dan tahu bahwa kedua waktu berada pada hari yang sama maka buatlah
datetime
masing-masing dengan hari yang ditetapkan untuk hari ini dan kurangi mulai dari waktu berhenti untuk mendapatkan interval (timedelta
).sumber
Lihatlah modul datetime dan objek timedelta. Anda harus membangun objek datetime untuk waktu mulai dan berhenti, dan ketika Anda menguranginya, Anda mendapatkan timedelta.
sumber
Ringkas jika Anda hanya tertarik pada waktu yang telah berlalu yaitu di bawah 24 jam. Anda dapat memformat output sesuai kebutuhan dalam pernyataan pengembalian:
sumber