java - 9 月的简短格式 "Sep"不再在 Java 17 的 en_GB 语言环境中解析

标签 java date

这适用于 Java 11 但不适用于 Java 17

DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM dd, yyyy")
    .withLocale(Locale.UK);
format.parse("Sep 29, 1988");
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)
我的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)
发生了什么变化?

最佳答案

似乎在 en_GB 语言环境中,九月的缩写形式现在是“九月”,而不是“九月”。所有其他月份都是与 en_US 中相同的 3 个字母缩写。有点意思。作为一个英国人,“Sep”在我看来是错误的。
这是票:https://bugs.openjdk.java.net/browse/JDK-8251317
这不是 JDK 作者有意识的决定。 Java中默认使用的locale数据来自Common Locale Data Repository (CLDR) ,这是 Unicode Consortium 的一个项目.较新版本的 Java 随附有较新版本的 CLDR。因此,您可能偶尔会看到语言环境行为的变化。因此,您遇到的更改是功能,而不是错误。
你的只是许多小的调整之一。
这是 PR 中的特定更改,它为您打破了它:
https://github.com/openjdk/jdk/pull/1279/files#diff-97210acd6f77c4f4979c43445d60ba1c369f058230e41177dceca697800b1fa2R116

关于java - 9 月的简短格式 "Sep"不再在 Java 17 的 en_GB 语言环境中解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69267710/

相关文章:

java - 星号(通配符匹配)和 url-pattern

java - java中的非法前向引用

java - 如何访问android中的下载文件夹?

mysql - 找出mysql中两个日期范围之间重叠的天数

Mysql 减去 'N' 天日期值并与当前日期进行比较。 N 和 Date 是两个列值

string - MongoDB 大于 numberLong 的问题

java - 尝试使用tomcat注销时出现Http 500错误

java - 如何实现通用分页

javascript - 使用 Javascript 将 iso 时间戳转换为日期格式?

php - 如何转换yyyy-MM-dd HH :mm:ss to "15th Apr 2010" using PHP