如何在 hours:min:sec 中显示时间增量?

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

我正在将 timedelta 列表导出到 csv,但日期确实弄乱了格式。我试过这个:

 while time_list[count] > datetime.timedelta(days = 1):
        time_list[count] = (time_list[count] - datetime.timedelta(days =  1)) + datetime.timedelta(hours = 24)

但它会立即转换回天数并创建一个无限循环。

默认情况下,timedeltastr() 转换将始终包含 days 部分。在内部,该值始终标准化为天数、秒数和微秒数,尝试将 'convert' 天数转换为小时数没有意义,因为没有跟踪单独的小时分量。

如果您想以不同的方式设置 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)

这会忽略任何微秒部分,但会简单地添加:

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

演示:

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

如果忽略计数中的天数,可以直接转换timedelta。

def timedelta_to_time(initial_time: timedelta) -> time:
    hour = initial_time.seconds//3600
    minute = (initial_time.seconds//60) % 60
    second = initial_time.seconds - (hour*3600 + minute*60)

    return str(datetime.strptime(
        f"{hour}:{minute}:{second}", "%H:%M:%S"
    ).time())

示例:

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