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

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")

问题分析

你的代码有三个核心问题:

  1. 12小时制转24小时制不完整:只处理了PM时段非12点的情况,AM时段的12点(比如测试用例里的12:37 AM)没转换成0,导致当前时间的小时数还是12,而截止时间9:00 AM的小时数是9,12 < 9不成立,直接输出False。
  2. 多余的时间修正逻辑:后面四个if语句完全没必要,反而会打乱正确的24小时制转换结果,比如把正常的12点改成1,导致时间比较彻底出错。
  3. 判断逻辑不完整:当前时间晚于截止时间时只输出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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:46:30