You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用日期时间库实现时分字符串求和?现有代码存在进位问题

解决时分相加的进位问题(无需日期时间库)

我懂你现在卡在哪了——直接把小时和分钟当普通整数相加后,完全没处理分钟满60要进1小时的逻辑,才会出现7:70这种不符合时间规范的结果。咱们不用任何日期时间库也能搞定,核心就是两步:处理分钟进位和格式化补零,下面给你具体思路和修改后的代码:

核心思路

  1. 统一转成分钟计算:把所有时间都转换成分钟数相加,这样就不用中途考虑进位问题,最后再转回小时和分钟。
  2. 拆分回时分格式:总分钟数除以60得到最终小时数,取余得到最终分钟数(自动处理了进位)。
  3. 格式化输出:确保小时和分钟都是两位数(比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:53:11