Python实现毫秒转时间的动态格式化需求及问题求助
动态格式化毫秒为时间字符串的Python实现
需求是将毫秒值转换为动态适配的时间格式:
- 仅几秒时,输出如
17(而非00:00:17) - 4分7秒(247268毫秒)时,输出
4:07(而非00:04:07) - 保留毫秒部分(三位数字)
原有实现代码:
def points_to_time(self, points): time = datetime.timedelta(milliseconds=points) hours, remainder = divmod(time.seconds, 3600) minutes, seconds = divmod(remainder, 60) milliseconds = time.microseconds // 1000 formatted_time = "{:01}:{:02}:{:02}.{:03}".format(hours, minutes, seconds, milliseconds // 10) return formatted_time
尝试的条件格式化代码未达到预期,修正后的实现如下:
from datetime import timedelta def points_to_time(self, points): time_delta = timedelta(milliseconds=points) hours, remainder = divmod(time_delta.seconds, 3600) minutes, seconds = divmod(remainder, 60) milliseconds = time_delta.microseconds // 1000 parts = [] # 仅当小时数大于0时添加小时部分 if hours > 0: parts.append(f"{hours}") # 有小时或分钟数大于0时,处理分钟显示格式 if hours > 0 or minutes > 0: parts.append(f"{minutes:02}" if hours > 0 else f"{minutes}") # 根据是否存在小时/分钟,决定秒数是否补零 parts.append(f"{seconds:02}" if (hours > 0 or minutes > 0) else f"{seconds}") # 始终保留三位毫秒数 parts.append(f"{milliseconds:03}") # 拼接时间部分与毫秒部分 time_str = ":".join(parts[:-1]) + "." + parts[-1] return time_str
关键逻辑说明
- 小时部分:仅在小时数大于0时才加入结果,避免多余的前导零或无效占位
- 分钟部分:存在小时时,分钟补两位(如
1:05:30);无小时但有分钟时,直接显示分钟数(如4:07);无小时无分钟时不显示分钟 - 秒部分:存在小时/分钟时,秒数补两位;仅秒数时直接显示(如
17) - 毫秒部分:始终保留三位数字,用点与时间主体分隔
测试示例:
- 输入
17000(17秒)→ 输出17.000 - 输入
247268(4分7秒268毫秒)→ 输出4:07.268 - 输入
3661000(1小时1分1秒)→ 输出1:01:01.000
内容的提问来源于stack exchange,提问作者Kevin Osborne
相关产品推荐
相关产品推荐

