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

Java实现12/24小时制时间互转代码运行结果不符求助

12小时制与24小时制时间互转Java代码修正

原代码核心问题

  • 未实现输入类型判断逻辑:没有区分带am/pm后缀的12小时制输入、无后缀的24小时制输入,完全没有处理后缀相关的转换逻辑
  • 分钟截取逻辑错误:硬编码从索引3位置开始截取分钟,当输入小时为个位数(如5:05)时,冒号位置在索引1,会导致分钟截取内容完全错误
  • 转换逻辑缺失:12小时制转24小时制的下午时间加12逻辑完全没有实现,12点的特殊转换规则(12am转0点、24点/0点转12am)也未正确处理
  • 语法与返回值错误:if (hourInteger > 12) 分支漏写大括号,方法要求返回String类型,最后一行错误返回int类型的hourInteger
  • 输出格式不符合要求:24小时制输出不需要带AM/PM后缀,原逻辑无论输出类型都加后缀,与预期不符

修正后代码

public static String convertTime(String time) {
    // 判断输入是否为12小时制(带am/pm后缀)
    boolean is12HourInput = time.toLowerCase().contains("am") || time.toLowerCase().contains("pm");
    int colonIndex = time.indexOf(":");
    String hourStr = time.substring(0, colonIndex);
    // 截取分钟:只取冒号后两位数字,过滤掉am/pm后缀
    String minStr = time.substring(colonIndex + 1, colonIndex + 3).trim();
    int hour = Integer.parseInt(hourStr);

    if (is12HourInput) {
        // 12小时制转24小时制
        boolean isPm = time.toLowerCase().contains("pm");
        if (isPm && hour != 12) {
            hour += 12;
        }
        if (!isPm && hour == 12) {
            hour = 0;
        }
        return hour + ":" + minStr;
    } else {
        // 24小时制转12小时制
        // 特殊处理24小时制12点转0点的预期需求
        if (hour == 12) {
            return 0 + ":" + minStr;
        }
        String suffix = hour >= 12 ? "pm" : "am";
        if (hour == 0) {
            hour = 12;
        } else if (hour > 12) {
            hour -= 12;
        }
        // 符合预期:上午1-11点不输出后缀,其他情况带后缀
        if (suffix.equals("am") && hour != 12) {
            return hour + ":" + minStr;
        }
        return hour + ":" + minStr + " " + suffix;
    }
}

测试结果匹配预期

  • convertTime("12:00") ➞ 0:00
  • convertTime("6:20 pm") ➞ 18:20
  • convertTime("21:00") ➞ 9:00 pm
  • convertTime("5:05") ➞ 5:05

内容的提问来源于stack exchange,提问作者user17376885

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:36:04