使用dd-MMM-uuuu解析LocalDate触发DateTimeParseException如何解决
异常原因
你当前的解析格式与输入字符串格式不匹配,所以会抛出解析异常:
- 待解析的输入字符串
2021-10-31是年-月-日结构,对应格式符应为uuuu-MM-dd - 你写的解析格式
dd-MMM-uuuu是日-月份缩写-年结构,和输入结构完全不符,无法正确解析。
实现方案
你需要分两步完成转换:先将输入字符串解析为LocalDate对象,再将该对象格式化为你需要的31-Oct-2021格式即可。
注意:MMM对应月份的本地化缩写,要输出英文的Oct类缩写,必须显式指定英文Locale,避免系统默认中文Locale输出中文月份。
完整可运行代码
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Locale; public class DateConvertTest { public static void main(String[] args) { // 定义输入格式解析器 DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd"); String inputDateStr = "2021-10-31"; // 解析得到LocalDate对象 LocalDate localDate = LocalDate.parse(inputDateStr, inputFormatter); // 定义输出格式解析器,指定英文Locale DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MMM-uuuu", Locale.ENGLISH); // 格式化得到目标格式字符串 String outputDateStr = localDate.format(outputFormatter); System.out.println(outputDateStr); // 输出:31-Oct-2021 } }
额外说明
- 解析和格式化是两个独立流程,不能混用格式
- 所有涉及本地化的格式符(比如
MMM、EEE等)都建议显式指定Locale,避免不同环境运行结果不一致
内容的提问来源于stack exchange,提问作者Arooshi
相关产品推荐
相关产品推荐

