首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >九月的简短形式“九月”不再在en_GB语言环境中用Java17解析

九月的简短形式“九月”不再在en_GB语言环境中用Java17解析
EN

Stack Overflow用户
提问于 2021-09-21 10:58:11
回答 2查看 1.9K关注 0票数 14

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

代码语言:javascript
复制
DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM dd, yyyy")
    .withLocale(Locale.UK);
format.parse("Sep 29, 1988");

Java 17堆栈跟踪:

代码语言:javascript
复制
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版本:

代码语言:javascript
复制
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

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-21 11:40:56

在en_GB地区,9月的短形式现在似乎是“9月”,而不是“9月”。其他所有的月份都是与en_US相同的3个字母缩写。有点道理。作为英国人,“九月”在我看来是不对的。

这是票:https://bugs.openjdk.java.net/browse/JDK-8251317

这不是JDK作者有意识的决定。在Java中默认使用的区域设置数据来自https://en.wikipedia.org/wiki/Common_Locale_Data_Repository,这是Unicode联合会的一个项目。新版本的Java提供了较新版本的CLDR。因此,您可能偶尔会看到地区行为的变化。因此,您所遇到的更改是一个特性,而不是一个bug。

你的只是许多小调整中的一个。

下面是PR中为您打破它的具体变化:https://github.com/openjdk/jdk/pull/1279/files#diff-97210acd6f77c4f4979c43445d60ba1c369f058230e41177dceca697800b1fa2R116

票数 20
EN

Stack Overflow用户

发布于 2022-08-05 16:26:40

除了为日期/时间解析文本(来自外部遗留源)是否是一件好事,或者是否应该允许标准发展和向后兼容性的争论之外……

一个实用的解决方法是将Locale.UK转换为Locale.US,用于解析Sep 29, 198830-Sep-2020等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69267710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档