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

DateTimeFormatter解析ddMMMyy格式日期抛DateTimeParseException如何解决?

异常原因分析
  • 日期模式与输入长度不匹配:你使用的模式串ddMMMyy中,yy仅能匹配2位长度的年份,而你处理后的日期字符串(如*28Feb2020*)年份为4位,总长度为9位。模式串仅能匹配前7位(2位日+3位月+2位年),剩余第7位开始的内容无对应匹配规则,因此抛出DateTimeParseException。
  • 默认严格匹配规则下,Locale.US区域的MMM规则要求月份缩写首字母大写,如果你后续修改字符串处理逻辑导致月份全小写/全大写,也会额外触发匹配失败。
修复方案

只需将日期模式串中的2位年份标识yy修改为4位年份标识yyyy即可,同时可配置解析器为不区分大小写,提升兼容性。
修正后的代码如下:

// 原字符串处理逻辑保持不变,当前写法刚好可以生成首字母大写的月份格式
String issueDate = abcIssueDate.substring(0, 3)
                  + abcIssueDate.substring(3).toLowerCase();
// 配置不区分大小写+4位年份匹配规则,提升鲁棒性
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .appendPattern("ddMMMyyyy")
        .toFormatter(Locale.US);
LocalDate localDate = LocalDate.parse(issueDate, formatter);

如果不需要兼容大小写场景,也可以直接简化formatter定义:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMMyyyy", Locale.US);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:10