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

SimpleDateFormat输出错误的小时与秒数据问题求助

SimpleDateFormat输出错误的小时与秒数据问题求助

嗨,我来帮你揪出这个问题的根源!

你遇到的两个日期输出重复且不符合预期的问题,核心原因是格式化模式的占位符用错了:

你写的格式字符串是 "HH:MM a",这里的 MM 代表的是两位数字的月份(比如03表示3月),而不是你想要的分钟!表示分钟的正确占位符是小写的 mm。

这就解释了为什么两个日期的输出看起来一样——如果你的两个Date对象处于同一个月份,那么格式化后的MM部分完全相同,要是小时也刚好一致的话,最终输出自然就会一模一样,看起来像是复用了第一个日期的结果。

修正后的代码

只需要把格式字符串改成 "HH:mm a" 就可以解决问题:

public static void getHourAndTime(Date startDate, Date endDate){
    SimpleDateFormat formatter = new SimpleDateFormat("HH:mm a");
    String formattedstartTime = formatter.format(startDate);
    System.out.println("startTime: " + formattedstartTime);
    String formattedEndTime = formatter.format(endDate);
    System.out.println("endTime: " + formattedEndTime);
}

额外建议(针对Java 8+项目)

如果你使用的是Java 8及以上版本,非常建议替换掉老旧的SimpleDateFormat,改用java.time包下的线程安全且设计更清晰的日期时间API,比如DateTimeFormatter,能从根源上减少这类格式符混淆的问题,同时避免多线程场景下的潜在bug。示例代码如下:

import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public static void getHourAndTime(Date startDate, Date endDate){
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm a");
    // 将Date转换为Java 8+的LocalDateTime
    String formattedStartTime = formatter.format(
        startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
    );
    System.out.println("startTime: " + formattedStartTime);
    
    String formattedEndTime = formatter.format(
        endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
    );
    System.out.println("endTime: " + formattedEndTime);
}

备注:内容来源于stack exchange,提问作者PT15

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:59:36