这适用于 Java 11,但不适用于 Java 17
DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM dd, yyyy")
.withLocale(Locale.UK);
format.parse("Sep 29, 1988");
Run Code Online (Sandbox Code Playgroud)
Java 17 堆栈跟踪:
Exception in thread "main" java.time.format.DateTimeParseException: Text 'Sep 29, 1988' could not be parsed at index 0
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1880)
Run Code Online (Sandbox Code Playgroud)
我的Java版本:
openjdk version "17" 2021-09-14 LTS
OpenJDK Runtime Environment Zulu17.28+13-CA (build 17+35-LTS)
OpenJDK 64-Bit Server VM Zulu17.28+13-CA (build 17+35-LTS, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
发生了什么变化?
Mic*_*ael 33
似乎在 en_GB 语言环境中,九月的缩写形式现在是“Sept”,而不是“Sep”。所有其他月份都是与 en_US 中相同的 3 个字母缩写。有点道理。作为一个英国人,“Sep”对我来说看起来不对。
这是票证:https ://bugs.openjdk.java.net/browse/JDK-8251317
这不是 JDK 作者有意识的决定。Java中默认使用的语言环境数据来自Common Locale Data Repository (CLDR) ,这是Unicode Consortium的一个项目。较新版本的 Java 附带较新版本的 CLDR。因此,您有时可能会看到区域设置行为发生变化。因此,您遇到的更改是一个功能,而不是一个错误。
你的只是众多小调整之一。
以下是 PR 中为您带来的具体更改: https://github.com/openjdk/jdk/pull/1279/files#diff-97210acd6f77c4f4979c43445d60ba1c369f058230e41177dceca697800b1fa2R116
归档时间: |
|
查看次数: |
6793 次 |
最近记录: |