本文教你用标准库`datetime.strptime()`精准解析并比较am/pm格式的时间,避免手动转换时因12点(如12:3

在处理12小时制时间(如 12:37 AM、9:00 AM)的比较任务时,手动转换小时值极易出错——尤其是对 12 AM(对应0时)和 12 PM(对应12时)的特殊处理。你提供的代码中多次修改 due_hour(如 due_hour -= 11),不仅逻辑混乱,还导致 12:37 AM 被错误映射为 1 AM,从而在 current_hour == 1 与 due_hour == 9 比较时跳过分钟判断,直接输出 "False",违背预期。
推荐使用 Python 内置的 datetime.strptime() 方法,它专为解析带格式的时间字符串设计,能自动、准确地将 12:37 AM → 00:37、12:00 PM → 12:00、1:15 PM → 13:15 等全部情况标准化为24小时制的 datetime 对象,后续只需直接比较大小即可。
✅ 正确实现示例:
import datetime as dt
# 假设输入变量如下(示例值:当前 12:37 AM,截止 9:00 AM)
current_hour = 12
current_minute = 37
current_section = "AM"
due_hour = 9
due_minute = 0
due_section = "AM"
# 构造标准时间字符串并解析(注意格式符:%I 表示12小时制小时,%M 分钟,%p 表示AM/PM)
try:
current = dt.datetime.strptime(f"{current_hour}:{current_minute:02d} {current_section}", "%I:%M %p")
due = dt.datetime.strptime(f"{due_hour}:{due_minute:02d} {due_section}", "%I:%M %p")
# 直接比较:若当前时间早于截止时间,则仍可提交
is_eligible = current < due
print("True" if is_eligible else "False") # 输出:True ✅
except ValueError as e:
print("时间格式错误,请检查输入:", e)? 关键说明:
⚠️ 注意事项:
总结:与其在手动进位、减法和条件分支中反复调试(尤其易错的12点逻辑),不如交由成熟的标准库完成解析。一行 strptime 调用,即可让时间比较变得简洁、可靠、可维护。