Saya hanya menemukan pertanyaan Konversi Hari dan Waktu (Jam x Menit x Detik) ke Waktu saja di stackoverflow dan sepertinya itu akan membantu saya tetapi tampaknya tidak sepenuhnya berlaku untuk apa yang saya lakukan.

Saya sedang menulis program pelacakan upah dan membutuhkannya untuk memberi saya jumlah total dari semua input jam. Saya punya bentuk yang jauh lebih kecil dan ringkas untuk hanya mengerjakan satu aspek ini. Ini menghemat banyak waktu karena program utama membutuhkan semua waktu mulai dan berakhir individu untuk dimasukkan oleh pengguna. Saat ini menunjukkan 2 days, 22:00:00 seperti pada output sedangkan saya idealnya lebih suka untuk menunjukkan 70:00, hanya menampilkan jam dan menit dan menyingkirkan bagian kedua yang tidak dibutuhkan.

import datetime


def time_diff(a, b):  # Calculates time difference between start and finish
    return b - a


start = '10:00'
mon_start = datetime.datetime.strptime(start, '%H:%M')
finish = '20:00'
mon_fin = datetime.datetime.strptime(finish, '%H:%M')
mon_hours = time_diff(mon_start, mon_fin)

start = '10:00'
tue_start = datetime.datetime.strptime(start, '%H:%M')
finish = '20:00'
tue_fin = datetime.datetime.strptime(finish, '%H:%M')
tue_hours = time_diff(tue_start, tue_fin)

start = '10:00'
wed_start = datetime.datetime.strptime(start, '%H:%M')
finish = '20:00'
wed_fin = datetime.datetime.strptime(finish, '%H:%M')
wed_hours = time_diff(wed_start, wed_fin)

start = '10:00'
thu_start = datetime.datetime.strptime(start, '%H:%M')
finish = '20:00'
thu_fin = datetime.datetime.strptime(finish, '%H:%M')
thu_hours = time_diff(thu_start, thu_fin)

start = '10:00'
fri_start = datetime.datetime.strptime(start, '%H:%M')
finish = '20:00'
fri_fin = datetime.datetime.strptime(finish, '%H:%M')
fri_hours = time_diff(fri_start, fri_fin)

start = '10:00'
sat_start = datetime.datetime.strptime(start, '%H:%M')
finish = '20:00'
sat_fin = datetime.datetime.strptime(finish, '%H:%M')
sat_hours = time_diff(sat_start, sat_fin)

start = '10:00'
sun_start = datetime.datetime.strptime(start, '%H:%M')
finish = '20:00'
sun_fin = datetime.datetime.strptime(finish, '%H:%M')
sun_hours = time_diff(sun_start, sun_fin)

total_hours = mon_hours + tue_hours + wed_hours + thu_hours + fri_hours + sat_hours + sun_hours
print(total_hours)
0
MarcoM 4 Januari 2021, 18:52

3 jawaban

Jawaban Terbaik

Ini:

def time_diff(a, b):  # Calculates time difference between start and finish
    return b - a

Jika a adalah datetime.datetime dan b adalah objek datetime.datetime return datetime.timedelta. Anda dapat menggunakan metode .total_seconds untuk mendapatkan nilai dalam hitungan detik, yang kemudian dapat Anda gunakan untuk perhitungan lebih lanjut, misalnya

import datetime
total = datetime.timedelta(days=3,minutes=10)
total_minutes = int(total.total_seconds()//60)
hours, minutes = total_minutes // 60, total_minutes % 60
print(hours, minutes)  # 72 10
2
Daweo 4 Januari 2021, 16:07

Cukup gunakan cetakan ini di akhir:

print(
    "{}:{:02d}".format(
        total_hours.days * 24 + total_hours.seconds // 3600,
        (total_hours.seconds // 60) % 60,
    )
1
Leemosh 4 Januari 2021, 16:15

Semua solusi di atas akan berhasil, tetapi hanya ingin berbagi sesuatu dari pihak saya juga.

Kode:

seconds = time_diff(a, b).total_seconds()


def convert(seconds):
    mins, secs = divmod(int(seconds), 60)
    hours, mins = divmod(mins, 60)
    return f'{hours:02d}:{mins:02d}:{secs:02d}'


print(convert(seconds))    # Will print in HH:MM:SS format
0
XAMES3 4 Januari 2021, 16:47