Python datetime.now()计算所得时间差的单位是毫秒还是秒?
Python datetime时间差计算问题解答
首先你给出的输出Time spent: 0:00:00.005437不代表process函数仅耗时0.005毫秒,相关规则说明如下:
1. timedelta输出格式说明
两个datetime.datetime对象相减得到的是timedelta类型的时间差对象,它的默认字符串输出格式为[天数]:[小时]:[分钟]:[秒].[微秒],你这个结果的各部分含义:
- 冒号分隔的前三位
0:00:00分别对应天数、小时、分钟,三个值都是0 - 小数点后的6位数字
005437对应微秒(1秒=1000000微秒) - 换算成常用单位:总耗时为0.005437秒,约等于5.44毫秒,和你以为的0.005毫秒差了三个数量级。
2. 时间差单位获取规则
datetime.now()计算得到的时间差没有固定默认单位,你可以根据需求从timedelta对象中自行提取对应单位的数值:
- 取总秒数(浮点数,包含小数部分):调用
total_seconds()方法,示例:(end - begin).total_seconds(),你这个案例返回值为0.005437 - 取总毫秒数:总秒数乘1000即可,示例:
(end - begin).total_seconds() * 1000,你这个案例返回值约为5.44 - 取总微秒数:总秒数乘1000000即可,注意不要直接用
timedelta.microseconds属性,该属性仅返回不足1秒部分的微秒值,时间差超过1秒时数值会不准。
3. 耗时不符合预期的排查方向
如果你的业务逻辑处理量很大,实际耗时明显高于5毫秒,可以优先排查以下场景:
- 传入
process的lines参数为空,函数直接走了空分支快速返回 process内部包含异步/多线程逻辑,没有等待任务全部执行完成就提前返回了结果- 测试时触发了内部缓存、跳过了实际重逻辑的执行
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

