Format timedelta to string
As you know, you can get the total_seconds from a timedelta object by accessing the .seconds
attribute.
Python provides the builtin function divmod()
which allows for:
s = 13420hours, remainder = divmod(s, 3600)minutes, seconds = divmod(remainder, 60)print '{:02}:{:02}:{:02}'.format(int(hours), int(minutes), int(seconds))# result: 03:43:40
or you can convert to hours and remainder by using a combination of modulo and subtraction:
# arbitrary number of secondss = 13420# hourshours = s // 3600 # remaining secondss = s - (hours * 3600)# minutesminutes = s // 60# remaining secondsseconds = s - (minutes * 60)# total timeprint '{:02}:{:02}:{:02}'.format(int(hours), int(minutes), int(seconds))# result: 03:43:40
>>> str(datetime.timedelta(hours=10.56))10:33:36>>> td = datetime.timedelta(hours=10.505) # any timedelta object>>> ':'.join(str(td).split(':')[:2])10:30
Passing the timedelta
object to the str()
function calls the same formatting code used if we simply type print td
. Since you don't want the seconds, we can split the string by colons (3 parts) and put it back together with only the first 2 parts.