如何以小时显示timedelta:min:sec?

Joh*_*ohn 2 python csv timedelta

我正在向csv导出timedeltas列表,这些日子真的搞砸了格式.我试过这个:

 while time_list[count] > datetime.timedelta(days = 1):
        time_list[count] = (time_list[count] - datetime.timedelta(days =  1)) + datetime.timedelta(hours = 24)
Run Code Online (Sandbox Code Playgroud)

但它会立即转换回天,并创造一个无限循环.

Mar*_*ers 8

默认情况下str(),a 的转换timedelta将始终包含该days部分.在内部,值总是标准化为天数,秒和微秒,尝试将天数"转换"为几小时是没有意义的,因为没有跟踪单独的小时组件.

如果要以timedelta()不同方式格式化对象,可以手动轻松完成:

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)
Run Code Online (Sandbox Code Playgroud)

这忽略了任何微秒部分,但是这很简单:

return '{:d}:{:02d}:{:02d}.{:06d}'.format(hours, minutes, seconds, td.microseconds)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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'
Run Code Online (Sandbox Code Playgroud)