Python使用datetime将毫秒转字符串时如何保留末尾零值?
问题根因
你现有代码的问题出在:当输入的毫秒数是1000的整数倍时,str(datetime.timedelta(milliseconds=t)) 输出的字符串不会携带小数点及后续的毫秒部分,此时直接执行[:-3]会截断末尾的秒数内容,导致格式异常。
修复方案
方案1:最小改动适配原有逻辑
只需要增加对字符串是否包含小数点的判断,整秒场景直接补全,000后缀即可:
import datetime def milliseconds_to_str(t): """Converts the number of milliseconds to HH:MM:SS,ms time""" td_str = str(datetime.timedelta(milliseconds=t)) if '.' in td_str: return td_str.replace('.', ',')[:-3] else: return f"{td_str},000"
方案2:手动计算时分秒毫秒(兼容性更强)
如果要完全规避timedelta字符串输出的格式波动,可以手动拆分时间单位格式化输出,逻辑更可控:
import datetime def milliseconds_to_str(t): """Converts the number of milliseconds to HH:MM:SS,ms time""" total_seconds = t // 1000 ms = t % 1000 hours = total_seconds // 3600 minutes = (total_seconds % 3600) // 60 seconds = total_seconds % 60 return f"{hours}:{minutes:02d}:{seconds:02d},{ms:03d}"
验证结果
使用你给出的测试用例验证:
milliseconds_to_str(1000)→0:00:01,000符合预期milliseconds_to_str(960000)(你示例中1000000应为笔误,960000毫秒对应16分钟整)→0:16:00,000符合预期milliseconds_to_str(4000400)→1:06:40,400输出正常milliseconds_to_str(80808231)→22:26:48,231输出正常milliseconds_to_str(80808000)→22:26:48,000符合预期
内容的提问来源于stack exchange,提问作者David Ferris
相关产品推荐
相关产品推荐

