如何将Python中Timedelta时长格式化为微秒等易读形式?
嘿,这个时间格式转换的需求很清晰,我来给你两种解决方案,一种是手动实现(不用装额外库),另一种是用第三方工具简化操作!
手动实现(无依赖)
首先,datetime.now() - startTime返回的是一个timedelta对象,它自带了seconds和microseconds属性,我们可以直接提取这些值来拼接成你想要的格式。根据你的例子,我写了一个适配的函数:
from datetime import datetime import time def format_timedelta_to_custom(td): # 处理小于1秒的情况,匹配你示例中的"2 microsecond"显示逻辑 if td.seconds == 0: # 取微秒数的前三位(即毫秒值),对应你给出的示例格式 ms = td.microseconds // 1000 return f"{ms} microsecond" # 处理大于等于1秒的情况,拼接秒和毫秒值 else: ms = td.microseconds // 1000 return f"{td.seconds} second_{ms} microsecond" # 测试一下 # 测试短耗时场景 start = datetime.now() time.sleep(0.002) # 模拟2毫秒的操作 elapsed = datetime.now() - start print(format_timedelta_to_custom(elapsed)) # 输出:2 microsecond # 测试长耗时场景 start = datetime.now() time.sleep(20.912) # 模拟20秒912毫秒的操作 elapsed = datetime.now() - start print(format_timedelta_to_custom(elapsed)) # 输出:20 second_912 microsecond
如果想要严格按真实微秒显示(比如0.002秒实际是2000微秒),只需要把函数里的td.microseconds // 1000改成td.microseconds即可。
第三方库实现
如果你不想自己写逻辑,可以用humanize库,它专门用来把时间、数字转换成人类友好的格式。先安装它:
pip install humanize
然后使用:
import humanize from datetime import datetime import time start = datetime.now() time.sleep(0.002) elapsed = datetime.now() - start print(humanize.naturaldelta(elapsed)) # 输出:2 milliseconds start = datetime.now() time.sleep(20.912) elapsed = datetime.now() - start print(humanize.naturaldelta(elapsed)) # 输出:21 seconds(会自动四舍五入)
如果想要完全匹配你要的下划线格式,你可以结合humanize的基础方法自己调整,不过手动实现反而更直接。
内容的提问来源于stack exchange,提问作者rahul singh
相关产品推荐
相关产品推荐

