Format a timedelta object

Pete Forman petef4+usenet at gmail.com
Fri May 27 16:41:29 EDT 2016


Steven D'Aprano <steve at pearwood.info> writes:

> On Thu, 26 May 2016 03:28 pm, Zachary Ware wrote:
>
>> On Thu, May 26, 2016 at 12:16 AM, Steven D'Aprano
>> <steve+comp.lang.python at pearwood.info> wrote:
>>> I have a timedelta object, and I want to display it in a nice
>>> human-readable format like 03:45:17 for "three hours, forty five minutes,
>>> 17 seconds".
>>>
>>> Is there a standard way to do this?
>>
>>    >>> timedelta(100)
>>    datetime.timedelta(100)
>>    >>> str(timedelta(seconds=100))
>>    '0:01:40'
>>    >>> str(timedelta(hours=100))
>>    '4 days, 4:00:00'
>>
>> (I recently spent *way* too long trying to figure out how to properly
>> format the thing before being reminded that a plain str call gives
>> exactly what I was after.)
>
> Thanks Zach. Unfortunately, the format is not quite how I want it, so I
> guess I'll have to extract the H:M:S fields manually from the seconds.

It might be useful if timedelta were to get an isoformat() method. ISO
8601 specifies formats for durations; most people are familiar only with
the date amd time formats. There are variations available but PnDTnHnMnS
is probably the best. The biggest timedelta unit is days. Years and
months are not appropriate.

-- 
Pete Forman



More information about the Python-list mailing list