如何在 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)
但它会立即转换回天数并创建一个无限循环。
默认情况下,timedelta
的 str()
转换将始终包含 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'
我正在将 timedelta 列表导出到 csv,但日期确实弄乱了格式。我试过这个:
while time_list[count] > datetime.timedelta(days = 1):
time_list[count] = (time_list[count] - datetime.timedelta(days = 1)) + datetime.timedelta(hours = 24)
但它会立即转换回天数并创建一个无限循环。
默认情况下,timedelta
的 str()
转换将始终包含 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'