12小时制时间比较代码异常:12:37 AM与9:00 AM判断错误求助
作业提交时间判断代码修复方案
我是编程新手,正在实现作业提交资格判断功能:当由current_hour、current_minute、current_section(AM/PM)表示的当前时间早于由due_hour、due_minute、due_section表示的截止时间时,作业可提交。但测试当前时间为12:37 AM、截止时间为9:00 AM的用例时,代码返回了错误的结果False,而非正确的True。以下是我的代码,盼求帮助:
if current_section == "PM" and current_hour != 12: current_hour += 12 if due_section == "PM" and due_hour != 12: due_hour += 12 if current_section == "PM" and due_hour == 12: due_hour -= 11 if current_section == "AM" and due_hour == 12: due_hour -= 11 if due_section == "PM" and due_hour == 12: due_hour -= 11 if due_section == "AM" and due_hour == 12: due_hour -= 11 if current_hour < due_hour: print("True") else: print("False") if current_hour == due_hour: if current_minute < due_minute: print("True")
问题分析
你的代码有三个核心问题:
- 12小时制转24小时制不完整:只处理了PM时段非12点的情况,AM时段的12点(比如测试用例里的12:37 AM)没转换成0,导致当前时间的小时数还是12,而截止时间9:00 AM的小时数是9,12 < 9不成立,直接输出False。
- 多余的时间修正逻辑:后面四个
if语句完全没必要,反而会打乱正确的24小时制转换结果,比如把正常的12点改成1,导致时间比较彻底出错。 - 判断逻辑不完整:当前时间晚于截止时间时只输出False,但没处理小时相等但分钟更大的情况,重复打印的逻辑也容易出现混乱。
修正后的代码
# 把当前时间转换为24小时制的总分钟数 if current_section == "AM": current_hour_24 = 0 if current_hour == 12 else current_hour else: current_hour_24 = 12 if current_hour == 12 else current_hour + 12 current_total = current_hour_24 * 60 + current_minute # 把截止时间转换为24小时制的总分钟数 if due_section == "AM": due_hour_24 = 0 if due_hour == 12 else due_hour else: due_hour_24 = 12 if due_hour == 12 else due_hour + 12 due_total = due_hour_24 * 60 + due_minute # 直接比较总分钟数,判断当前时间是否更早 print(current_total < due_total)
逻辑说明
把时间转换成总分钟数是最直观的比较方式:
- 测试用例里,12:37 AM转换后是
0*60 + 37 = 37分钟 - 9:00 AM转换后是
9*60 + 0 = 540分钟 - 37 < 540,所以输出True,完全符合预期
这样既避免了复杂的分阶段判断,也不会出现转换错误的问题。
内容的提问来源于stack exchange,提问作者VinSo25
相关产品推荐
相关产品推荐

