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

Java中12小时制时间递增异常问题求助

问题分析与解决

问题根源

你的代码核心问题出在SimpleDateFormat的模式选择上:用了HH:mm a,其中HH是24小时制的小时格式,但你同时搭配了12小时制的AM/PM标识a,这种混用直接导致解析和格式化逻辑混乱:

  • 解析12:59 PM时,HH会把12当作24小时制的12点,加1分钟后变成13点,格式化时直接输出24小时制的13,再带上PM,就出现了13:00 PM的错误;
  • 解析01:00 PM时,HH把01识别为24小时制的凌晨1点,虽然时间数值加1分钟后是01:01,但原时间的PM标识没有被正确解析到Calendar的AM/PM字段里,最终格式化输出成了01:01 AM。

修复方案(基于旧API)

把模式中的HH改成hh(12小时制小时格式),让它和a正确配合,就能处理12小时制的时间逻辑:

private String getNextTime(String time) {
    final int INTERVAL = 1;
    // 用hh表示12小时制小时,配合a识别AM/PM
    SimpleDateFormat df = new SimpleDateFormat("hh:mm a", Locale.US);           
    Date d = null;                                                             
    try {
        d = df.parse(time);
    } catch (ParseException e) {
        System.out.println("Bad tee time: " + time);
        System.exit(-1);
    }
    Calendar cal = Calendar.getInstance();                                      
    cal.setTime(d);                                                             
    cal.add(Calendar.MINUTE, INTERVAL);                                         
    String outTime = df.format(cal.getTime());                                  
    return outTime;                                                           
}

测试验证结果:

  • 输入12:59 PM → 输出01:00 PM(符合预期)
  • 输入01:00 PM → 输出01:01 PM(符合预期)
  • 输入11:59 AM → 输出12:00 PM(符合预期)

推荐方案(Java 8+ 新时间API)

SimpleDateFormat和Calendar是线程不安全的过时API,Java 8之后推荐用java.time包下的类,代码更简洁、安全:

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

private String getNextTime(String time) {
    final int INTERVAL = 1;
    // 定义12小时制格式化器
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);
    // 解析时间
    LocalTime localTime = LocalTime.parse(time, formatter);
    // 增加1分钟
    LocalTime nextTime = localTime.plusMinutes(INTERVAL);
    // 格式化输出
    return nextTime.format(formatter);
}

这个方案无需手动处理复杂的时间字段,输入格式错误时会抛出DateTimeParseException,按需捕获即可,而且天生线程安全,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:22:46