Convert a timedelta to days, hours and minutes Convert a timedelta to days, hours and minutes python python

Convert a timedelta to days, hours and minutes


If you have a datetime.timedelta value td, td.days already gives you the "days" you want. timedelta values keep fraction-of-day as seconds (not directly hours or minutes) so you'll indeed have to perform "nauseatingly simple mathematics", e.g.:

def days_hours_minutes(td):    return td.days, td.seconds//3600, (td.seconds//60)%60


This is a bit more compact, you get the hours, minutes and seconds in two lines.

days = td.dayshours, remainder = divmod(td.seconds, 3600)minutes, seconds = divmod(remainder, 60)# If you want to take into account fractions of a secondseconds += td.microseconds / 1e6


days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60

As for DST, I think the best thing is to convert both datetime objects to seconds. This way the system calculates DST for you.

>>> m13 = datetime(2010, 3, 13, 8, 0, 0)  # 2010 March 13 8:00 AM>>> m14 = datetime(2010, 3, 14, 8, 0, 0)  # DST starts on this day, in my time zone>>> mktime(m14.timetuple()) - mktime(m13.timetuple())     # difference in seconds82800.0>>> _/3600                                                # convert to hours23.0