如何在Python中通过end-start计算任务耗时的时、分、秒?
问题分析
你原来的代码里,time.asctime()返回的是格式化后的字符串(比如"Wed Oct 11 12:34:56 2023"),字符串类型不能直接做减法运算,这是核心问题。要计算任务耗时,得先记录可计算的时间值(比如时间戳或datetime对象),再转换为时分秒格式。
解决方案
下面提供几种实用的实现方式:
方式一:用time.time()(时间戳,适合一般场景)
time.time()返回从1970年1月1日到现在的秒数(浮点数),计算差值后手动转换为时分秒:
import time start = time.time() # 这里写你的任务代码 # <some code here> end = time.time() elapsed = end - start # 总耗时(秒,浮点数) # 转换为时分秒 hours = int(elapsed // 3600) minutes = int((elapsed % 3600) // 60) seconds = elapsed % 60 print(f"任务完成耗时:{hours}时{minutes}分{seconds:.2f}秒")
方式二:用time.perf_counter()(高精度,适合短任务计时)
这个函数专门用于测量代码运行时间,精度比time.time()更高:
import time start = time.perf_counter() # <some code here> end = time.perf_counter() elapsed = end - start hours = int(elapsed // 3600) minutes = int((elapsed % 3600) // 60) seconds = elapsed % 60 print(f"任务完成耗时:{hours}时{minutes}分{seconds:.2f}秒")
方式三:用datetime模块(更直观的时间对象)
datetime.now()返回当前时间的对象,直接相减得到timedelta类型,可直接获取时分秒:
from datetime import datetime start = datetime.now() # <some code here> end = datetime.now() elapsed = end - start # 拆分时分秒 total_seconds = elapsed.total_seconds() hours = int(total_seconds // 3600) minutes = int((total_seconds % 3600) // 60) seconds = total_seconds % 60 print(f"任务完成耗时:{hours}时{minutes}分{seconds:.2f}秒")
如果不需要手动拆分,直接打印elapsed会得到类似0:00:01.234567的格式,也能直观看到耗时。
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

