12小时制转24小时制转换函数Bug排查:12:05:39AM输入无法正确转换问题
问题排查与修复:12小时制转24小时制函数异常
我来帮你定位这个问题!当输入是12:05:39AM时,你的代码返回的结果应该是0:05:39,但正确的24小时制格式应该是00:05:39——问题就出在小时数的格式化为两位数字这一步上。
问题根源分析
看你处理AM时段的代码:
if (Integer.parseInt(AMhour) == 12){ int newHour = ((Integer.parseInt(AMhour) + 12) % 24); return (newHour + s.substring(2,8)); }
这里newHour计算后是0,当你把整数0和字符串拼接时,它会被转换成字符串"0",最终得到"0:05:39",不符合24小时制要求的两位小时数格式(必须是00而不是0)。
修复方案
我们需要保证小时部分始终是两位数字,有两种简单的修复方式:
方式1:直接针对12AM的情况返回"00"
修改AM分支的代码,当遇到12AM时,直接用"00"替代原小时部分:
else if (s.substring(8).equals("AM")){ String AMhour = s.substring(0,2); if (Integer.parseInt(AMhour) == 12){ // 直接返回00开头的时间字符串 return "00" + s.substring(2,8); } return (AMhour + s.substring(2,8)); }
方式2:通用格式化(推荐)
使用String.format来格式化小时数为两位数字,这样不管是AM还是PM的情况,都能保证小时部分是两位,避免类似问题:
public static String timeConversion(String s) { String period = s.substring(8); String hourStr = s.substring(0,2); int hour = Integer.parseInt(hourStr); if (period.equals("PM")) { if (hour != 12) { hour += 12; } } else { // AM情况 if (hour == 12) { hour = 0; } } // 格式化小时为两位数字,拼接后面的分钟秒部分 return String.format("%02d%s", hour, s.substring(2,8)); }
%02d表示将整数格式化为两位数字,不足两位时用0补全,这样12AM就会被正确格式化为00,1PM会变成13,完全符合24小时制的格式要求。
测试验证
修复后,输入12:05:39AM会返回00:05:39,其他场景比如12:00:00PM返回12:00:00,9:30:45AM返回09:30:45,都能正常工作。
内容的提问来源于stack exchange,提问作者sanjna_007
相关产品推荐
相关产品推荐

