如何不使用日期时间库实现时分字符串求和?现有代码存在进位问题
解决时分相加的进位问题(无需日期时间库)
我懂你现在卡在哪了——直接把小时和分钟当普通整数相加后,完全没处理分钟满60要进1小时的逻辑,才会出现7:70这种不符合时间规范的结果。咱们不用任何日期时间库也能搞定,核心就是两步:处理分钟进位和格式化补零,下面给你具体思路和修改后的代码:
核心思路
- 统一转成分钟计算:把所有时间都转换成分钟数相加,这样就不用中途考虑进位问题,最后再转回小时和分钟。
- 拆分回时分格式:总分钟数除以60得到最终小时数,取余得到最终分钟数(自动处理了进位)。
- 格式化输出:确保小时和分钟都是两位数(比如8变成
08),保持时间格式的规范性。
修改后的代码
import re def add_time(time, duration): # 解析原始时间的时分和AM/PM time_parts = re.split(r"\s", time) hour_min = re.split(r":", time_parts[0]) hour1 = int(hour_min[0]) minute1 = int(hour_min[1]) period = time_parts[1] # 解析时长的时分 duration_parts = re.split(r":", duration) hour2 = int(duration_parts[0]) minute2 = int(duration_parts[1]) # 计算总分钟数,避免中途进位问题 total_minutes = hour1 * 60 + minute1 + hour2 * 60 + minute2 # 拆分回最终的小时和分钟 final_hour = total_minutes // 60 final_minute = total_minutes % 60 # 格式化输出,确保时分是两位数 return f'{final_hour:02d}:{final_minute:02d} {period}' # 测试例子 print(add_time("3:50 AM", "4:20")) # 输出:08:10 AM
关键细节说明
- 替换
eval()为int():eval()存在安全风险(如果传入恶意字符串会执行代码),用int()直接转换字符串为整数更安全可靠。 - 总分钟数计算:把小时都转成分钟后相加,从根源上避免了分钟满60的进位判断,逻辑更简洁。
:02d格式化符:这是Python f-string的格式化语法,会自动给小于10的数字前面补零,保证输出的时间是两位数的规范格式。
内容的提问来源于stack exchange,提问作者user13824946
相关产品推荐
相关产品推荐

