将字符串转换为 LocalDate [duplicate] 时出现问题

Issue With Converting String to LocalDate [duplicate]

提问人:Arnav Bose 提问时间:3/17/2023 最后编辑:AnonymousArnav Bose 更新时间:3/17/2023 访问量:75

问:

我正在尝试使用 LocalDate 将字符串日期格式转换为另一种日期格式(dd-MMM-yyyy)。

String date = "2018-04-16";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);
LocalDate localDate = LocalDate.parse(date, formatter);

我在 DateTimeFormatter 对象中使用和不使用 Locale.US 尝试了此代码。无论哪种方式,它都会返回此异常:

java.time.format.DateTimeParseException: Text '2018-04-16' could not be parsed at index 2

有没有办法使用 LocalDate 处理此日期转换,还是应该使用 SimpleDateFormat?

Java-Time 日期解析

评论

2赞 Stephen P 3/17/2023
您的格式是,但您指定的模式是 。您必须像“16-Apr-2018”一样才能使此解析起作用。String dateyyyy-MM-dddd-MMM-yyyydate
0赞 Arnav Bose 3/17/2023
好的,现在有问题了。实际上,我关心的是将日期转换为2018年4月16日格式。我有 2018-04-16 作为我的输入数据。
1赞 Stephen P 3/17/2023
如果输入是,则 DateTimeFormatter 需要使用相同的模式来分析它。然后,您可以将结果输出(转换)成所需的任何格式。yyyy-MM-ddLocalDate localDate
1赞 Arnav Bose 3/17/2023
是的,现在让它工作了。问题是我直接尝试将格式转换为所需的格式,而不是先将其转换为 LocalDate,然后再转换。现在我已经更新了它,它按照您的解释工作。
1赞 Anonymous 3/18/2023
有两票以不可重复或由错别字引起的问题结束。它是完全可重复的,不会由任何错别字引起。相反,我将其作为副本关闭,我认为这更正确且更有帮助。

答:

3赞 Menuka Ishan 3/17/2023 #1

在您的 Code Pattern 中,像 Jun 一样是三个字母的月份。如果要解析 ,则模式应为 yyyy-MM-dd。DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);dd-MMM-yyyy2018-04-16

请参考示例代码

String date = "2018-04-16";
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(date, inputFormatter);

更新 - 对于您在评论中提出的问题

将 String 转换为本地日期后,下面的代码应该可以解决问题。

DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US);
String outputDate = localDate.format(outputFormatter);