# Convert a timedelta to days, hours and minutes

### Question

I've got a timedelta. I want the days, hours and minutes from that - either as a tuple or a dictionary... I'm not fussed.

I must have done this a dozen times in a dozen languages over the years but Python usually has a simple answer to everything so I thought I'd ask here before busting out some nauseatingly simple (yet verbose) mathematics.

Mr Fooz raises a good point.

I'm dealing with "listings" (a bit like ebay listings) where each one has a duration. I'm trying to find the time left by doing `when_added + duration - now`

Am I right in saying that wouldn't account for DST? If not, what's the simplest way to add/subtract an hour?

1
199
1/22/2010 6:45:14 PM

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
``````
292
8/1/2018 8:47:59 PM

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

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