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:00convertTime("6:20 pm")➞18:20convertTime("21:00")➞9:00 pmconvertTime("5:05")➞5:05
内容的提问来源于stack exchange,提问作者user17376885
相关产品推荐
相关产品推荐

