У меня была похожая проблема с выводом расчета сверхурочных на работе. Значение всегда должно отображаться в формате ЧЧ: ММ, даже если оно больше одного дня, и значение может стать отрицательным. Я объединил некоторые из показанных решений, и, возможно, кто-то найдет это решение полезным. Я понял, что если значение timedelta является отрицательным, большинство показанных решений с помощью метода divmod не работают "из коробки":
def td2HHMMstr(td):
'''Convert timedelta objects to a HH:MM string with (+/-) sign'''
if td < datetime.timedelta(seconds=0):
sign='-'
td = -td
else:
sign = ''
tdhours, rem = divmod(td.total_seconds(), 3600)
tdminutes, rem = divmod(rem, 60)
tdstr = '{}{:}:{:02d}'.format(sign, int(tdhours), int(tdminutes))
return tdstr
timedelta to HH: MM строка:
td2HHMMstr(datetime.timedelta(hours=1, minutes=45))
'1:54'
td2HHMMstr(datetime.timedelta(days=2, hours=3, minutes=2))
'51:02'
td2HHMMstr(datetime.timedelta(hours=-3, minutes=-2))
'-3:02'
td2HHMMstr(datetime.timedelta(days=-35, hours=-3, minutes=-2))
'-843:02'