提问人:MS13 提问时间:10/25/2023 最后编辑:MS13 更新时间:10/25/2023 访问量:53
如何在 java 中解析 ~german 自定义格式日期?[复制]
How can I parse ~german custom formatted dates in java? [duplicate]
问:
我想以这样的格式解析我收到的日期,但使用德国月份:LocalDate
- 8月 15, 2023
- 30-Mai-2024
- 13-九月-2021
- 31-MRZ-2034
- 2013 年 2 月 2 日
我简化了应该解析这些格式化日期的代码(月份是德语),但它仍然不适用于 jdk 11.0.7 和 openjdk 11.0.13
public static void main(String args[]) {
String txt = "15-Aug-2023";
DateTimeFormatter format = new DateTimeFormatterBuilder()
.appendPattern("dd-MMM-yyyy")
.toFormatter(Locale.GERMAN);
LocalDate.parse(txt, format);
}
抛出异常:
线程“main”java.time.format.DateTimeParseException中的异常: 无法在索引 3 中解析文本“15-Aug-2023”
我错过了什么?
PS 刚刚注意到,如果我这样做:
System.out.println(format.format(LocalDate.now()));
我得到:
2023 年 9 月 24 日
我怎样才能克服这个意想不到的点?
答:
2赞
PeterMmm
10/25/2023
#1
这对我来说是:
public class Main {
public static void main(String[] args) {
String txt = "15-Aug-2023";
DateTimeFormatter format = new DateTimeFormatterBuilder()
.appendPattern("dd-LLL-yyyy")
.toFormatter(Locale.GERMAN);
System.out.println(LocalDate.parse(txt, format));
}
}
打印: 2023-08-15
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
评论
1赞
knittl
10/25/2023
JavaDoc 可以在此基础上进行改进。目前还不清楚 M 做什么和 L 做什么(以及为什么一个点而另一个不点)
0赞
PeterMmm
10/25/2023
System.out.println(format.format(LocalDate.now()));
打印在这里。好的,有 openjdk 版本“21” 2023-09-1924-Okt-2023
0赞
knittl
10/25/2023
是的,我明白了。官方的 JavaDoc 仍然需要改进。这个答案很好。
0赞
MS13
10/25/2023
仍然不适用于 31-Mrz-2034 相同的错误。我不知道他们是如何发送这些日期???
1赞
knittl
10/25/2023
@MS13因为“Mrz”不是“正确”(官方?)的缩写。它是“Mär”。如果使用非标准缩写,则必须使用自定义区域设置(或自定义月份映射;请参阅问题下的链接问答)
评论
Locale.GERMAN