本文介绍一种简洁、可靠的方式,使用 datetime.strptime() 将 am/pm 格式的小时分钟自动转换为 24 小时制时间对象,从而准确判断当前时间是否早于截止时间,彻底避免手动处理 12:xx am/pm 转换的逻辑错误。
在处理 12 小时制(AM/PM)时间比较时,手动转换小时值极易出错——尤其是 12:xx AM 和 12:xx PM 这两个边界情况。例如,12:37 AM 应转换为 0:37(即 0 时 37 分),而 12:0

更优解是交由 Python 标准库的专业解析器处理:datetime.strptime() 支持格式化字符串 "%I:%M %p",其中:
它会自动、无歧义地将任意合法 12 小时制时间映射为 datetime 对象(年月日默认为 1900-01-01,仅用于时间比较,完全安全)。
✅ 正确实现示例:
import datetime as dt
# 假设输入变量如下(实际中可来自用户或配置)
current_hour = 12
current_minute = 37
current_section = "AM"
due_hour = 9
due_minute = 0
due_section = "AM"
# 构造时间字符串并解析(注意:小时需转为字符串,且 %I 要求两位?不必要,'12' 和 '9' 均合法)
current_time = dt.datetime.strptime(
f"{current_hour}:{current_minute:02d} {current_section}",
"%I:%M %p"
)
due_time = dt.datetime.strptime(
f"{due_hour}:{due_minute:02d} {due_section}",
"%I:%M %p"
)
# 直接比较:返回 True 表示「尚未超时」(当前时间早于截止时间)
is_eligible = current_time < due_time
print(is_eligible) # 输出: True ✅? 关键优势:
⚠️ 注意事项:
总结:与其在手工转换逻辑中反复调试 12 AM/PM 的加减规则,不如信任经过充分测试的 datetime 解析器。一行 strptime 胜过十行条件分支——这是 Python “用对的工具做对的事”哲学的典型体现。