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
相关产品推荐
相关产品推荐

