How can I display timedelta in hours:min:sec?

前端 未结 1 1087
孤城傲影
孤城傲影 2020-12-10 09:29

I am exporting a list of timedeltas to csv and the days really messes up the format. I tried this:

 while time_list[count] > datetime.timedelta(days = 1)         


        
1条回答
  •  清歌不尽
    2020-12-10 09:50

    By default the str() conversion of a timedelta will always include the days portion. Internally, the value is always normalised as a number of days, seconds and microseconds, there is no point in trying to 'convert' days to hours because no separate hour component is tracked.

    If you want to format a timedelta() object differently, you can easily do so manually:

    def format_timedelta(td):
        minutes, seconds = divmod(td.seconds + td.days * 86400, 60)
        hours, minutes = divmod(minutes, 60)
        return '{:d}:{:02d}:{:02d}'.format(hours, minutes, seconds)
    

    This ignores any microseconds portion, but that is trivially added:

    return '{:d}:{:02d}:{:02d}.{:06d}'.format(hours, minutes, seconds, td.microseconds)
    

    Demo:

    >>> format_timedelta(timedelta(days=2, hours=10, minutes=20, seconds=3))
    '58:20:03'
    >>> format_timedelta(timedelta(hours=10, minutes=20, seconds=3))
    '10:20:03'
    

    0 讨论(0)
提交回复
热议问题