Вопрос : ... сделать это, чтобы показывать только подходящие значения времени?
Следующее реализует ваши собственные class Timedelta
:
class Timedelta(object):
def __init__(self, td):
self._td = td
def _calc(s, f):
_s = int(s % f)
return _s, int(s / f)
s, self.hours = _calc(self._td.seconds, (60 * 60))
self.seconds, self.minutes = _calc(s, 60)
def __str__(self):
r = ""
for v in [('Days', self._td.days), ('Hours', self.hours), ('Minutes', self.minutes), ('Seconds', self.seconds)]:
if v[1] != 0:
lingua = v[0]
if v[1] == 1: lingua = v[0][:-1]
r += "{} {} ".format(v[1], lingua)
return r
def __repr__(self):
return "({}) Days:{} Hours:{} Minutes:{} Seconds:{}"\
.format((self._td.seconds), self._td.days, self.hours, self.minutes, self.seconds)
Использование :
date1 = dt.datetime(2018, 9, 17, hour=18, minute=23, second=0)
date2 = dt.datetime(2018, 9, 17, hour=22, minute=23, second=10)
dtt = date2 - date1
print("dtt:{}".format(dtt))
tdelta = Timedelta(date2 - date1)
print("Timedelta::\__repr\__: {}".format(tdelta.__repr__()))
print("Timedelta::\__str\__: {}".format(tdelta))
Выход :
dtt: 4: 00: 10
Timedelta :: __ repr__: (14410) Дни: 0 Часы: 4 минуты: 0 Секунды: 10
Timedelta: __ str__: 4 Часы 10 секунд
Протестировано с Python: 3.4.2