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

