Java中LocalDate.parse用MMM dd, yyyy解析Oct 11, 2021报错如何解决
解析失败的核心原因
MMM格式符对应月份的本地化短文本表示,解析逻辑和你使用的Locale强关联。你调用DateTimeFormatter.ofPattern时没有显式指定Locale,会默认使用JVM当前运行环境的默认Locale,如果该Locale不是英语类Locale(比如是中文、西班牙语等非英语区域),就无法识别Oct这类英语月份缩写,所以会抛出索引0位置解析失败的错误。
修复方案
创建DateTimeFormatter时显式指定和日期文本匹配的Locale即可,示例代码如下:
LocalDate.parse("Oct 11, 2021", DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.ENGLISH))
额外注意要点
- 部分地区的英语Locale中,月份短缩写默认带点号后缀(比如
Oct.),如果你的日期文本不带点号,可以选择使用Locale.US这类不带点号后缀的英语Locale,或者通过DateTimeFormatterBuilder配置更宽松的解析规则。 - 如果你的日期文本使用的是其他语言的月份缩写,只需将
Locale.ENGLISH替换为对应语言的Locale即可。
内容的提问来源于stack exchange,提问作者Joe Almore
相关产品推荐
相关产品推荐

