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
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