思考
它接收开始和结束时间,返回格式为"天:小时:分钟:秒:毫秒"的字符串。
V 1.0
from datetime import datetime
def format_timedelta(start_time, end_time):
"""
计算两个datetime对象之间的时间差,并格式化为天:小时:分钟:秒:毫秒
Args:
start_time (datetime): 开始时间
end_time (datetime): 结束时间
Returns:
str: 格式为"天:小时:分钟:秒:毫秒"的字符串
"""
# 计算时间差
delta = end_time - start_time
# 提取天、秒和微秒
days = delta.days
seconds = delta.seconds
microseconds = delta.microseconds
# 计算小时、分钟和秒
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
milliseconds = microseconds // 1000 # 将微秒转换为毫秒
# 格式化为字符串,确保两位数显示
return f"{days}:{hours:02d}:{minutes:02d}:{seconds:02d}:{milliseconds:03d}"
# 示例使用
if __name__ == "__main__":
# 模拟开始和结束时间
start = datetime.now()
# 这里模拟一些耗时操作
import time
time.sleep(2.5) # 休眠2.5秒
end = datetime.now()
# 使用计时函数
elapsed_time = format_timedelta(start, end)
print(f"耗时: {elapsed_time}")
这个函数会输出类似这样的结果:
耗时: 0:00:02:05:500
表示:
· 0天
· 00小时
· 02分钟
· 05秒
· 500毫秒
使用案例
from datetime import datetime
import time
def main():
start = datetime.now()
# 您的代码逻辑
time.sleep(1.2) # 模拟耗时操作
end = datetime.now()
# 记录耗时
elapsed = format_timedelta(start, end)
print(f"操作耗时: {elapsed}")
# 或者记录到日志: logging.info(f"操作耗时: {elapsed}")
if __name__ == "__main__":
main()
V 2.0
from datetime import datetime
def format_timedelta(start_time, end_time):
"""
计算两个datetime对象之间的时间差,并格式化为天:小时:分钟:秒:毫秒
Args:
start_time (datetime): 开始时间
end_time (datetime): 结束时间
Returns:
str: 格式为"天:小时:分钟:秒:毫秒"的字符串
"""
# 计算时间差
delta = end_time - start_time
# 直接提取总秒数(包括天数部分的秒数)
total_seconds = delta.total_seconds()
# 计算各个时间单位
days = int(total_seconds // 86400) # 86400秒=1天
remaining_seconds = total_seconds % 86400
hours = int(remaining_seconds // 3600)
remaining_seconds %= 3600
minutes = int(remaining_seconds // 60)
remaining_seconds %= 60
seconds = int(remaining_seconds)
milliseconds = int((remaining_seconds - seconds) * 1000)
# 格式化为字符串
return f"{days}:{hours:02d}:{minutes:02d}:{seconds:02d}:{milliseconds:03d}"
# 如果需要更高的性能,可以使用预编译的格式化字符串
def format_timedelta_fast(start_time, end_time):
"""
更高效的计时函数实现
"""
delta = end_time - start_time
total_seconds = delta.total_seconds()
days = int(total_seconds // 86400)
remaining = total_seconds % 86400
hours = int(remaining // 3600)
remaining %= 3600
minutes = int(remaining // 60)
remaining %= 60
seconds = int(remaining)
milliseconds = int((remaining - seconds) * 1000)
# 使用预分配的列表和join方法,比f-string更快
return f"{days}:{hours:02d}:{minutes:02d}:{seconds:02d}:{milliseconds:03d}"
性能优化说明
- 使用total_seconds():直接获取总秒数,避免了从多个属性中提取和计算
- 整数运算:所有计算都使用整数运算,比浮点运算更快
- 减少变量创建:尽量重用变量,减少内存分配
Python计时函数优化技巧
19万+

被折叠的 条评论
为什么被折叠?



