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

JDK8中LocalDateTime用hh格式解析报错,改用HH正常的原因咨询

为什么用12小时制格式"dd/MM/yyyy hh:mm"格式化LocalDateTime后,解析会抛出DateTimeParseException?

核心原因是12小时制的hh格式必须配合AM/PM时段标记才能完成解析:

  • hh代表12小时制的小时(取值范围1-12),它本身无法区分时间是上午还是下午。你用这个格式格式化时,LocalDateTime只会输出小时和分钟(比如03/03/2023 01:56),但不会自动添加AM/PM标识。
  • 当你用同一个格式器解析这个字符串时,DateTimeFormatter因为缺少关键的时段信息,无法判断01:56是凌晨1点还是下午1点,因此直接抛出DateTimeParseException。

而HH是24小时制的小时格式(取值范围0-23),它不需要AM/PM标记就能唯一确定时间点,所以格式化和解析流程都能正常执行。

如果非要使用12小时制格式,有两个可行的解决方式:

  1. 在格式中加入AM/PM标记:把格式字符串改为"dd/MM/yyyy hh:mm a",这样格式化后的字符串会带上上午/下午(或英文AM/PM,取决于默认Locale),解析时就能识别时段信息。
  2. 解析时指定默认时段:通过DateTimeFormatterBuilder为解析器设置默认的AM/PM规则,比如默认按上午处理:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("dd/MM/yyyy hh:mm")
    .parseDefaulting(ChronoField.AMPM_OF_DAY, 0) // 0=上午(AM),1=下午(PM)
    .toFormatter();
LocalDateTime parsedTime = LocalDateTime.parse("03/03/2023 01:56", formatter);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:33:18