繁体   English   中英

为什么Java9中的时区WAT无法解析日期?

[英]Why is it unparsable date with timezone WAT in Java9?

SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
df.parse("Tue Nov 09 18:04:07 WAT 2021");

错误

适用于 Java8。 但不是java9。 使用 JDK 9.0.4


我很高兴获得替代解决方案。 但肯定现有的应用程序只是升级到 java 9.0.4。 我想知道造成这种情况的原因以及在整个应用程序中没有太多变化的处理方法。

在同一在线 IDE 中,代码适用于 java 9.0.1

无处不在的中断 - Java 10

工作场景:

爪哇 11

@Gibbs,确实,它失败了......

我无法使用已安装的 JDK 版本测试错误,但我遇到了您在屏幕截图中显示的在线编辑器

这不是一个完整的答案,但让我解释一下我的发现。

首先,问题出现在 Java 版本 10.0.1 中。 使用SimpleDateFormatDateTimeFormatter没有区别,所以我将使用第一个。

请看错误截图:

错误截图

我的猜测是,该错误与 Java 9 中引入的关于默认使用 CLDR 语言环境数据的重要更改有关:

在 JDK 9 中,默认语言环境数据使用从 Unicode 联盟的通用语言环境数据存储库 (CLDR) 派生的数据。 因此,用户可能会看到区域敏感服务行为和/或翻译的差异。 例如,CLDR 不为大多数 3 字母时区 ID 提供本地化显示名称,因此显示名称可能与 JDK 8 和更早版本不同。 JDK 继续提供旧版 JRE 语言环境数据,系统属性java.locale.providers可用于配置查找顺序。 要启用与 JDK 8 兼容的行为,可以使用以下方式设置系统属性:

-Djava.locale.providers=COMPAT,SPI

有关更多详细信息,请参阅JEP 252

如您所见,如果您提供java.locale.providers系统属性的建议值,请注意代码中的更改,一切运行顺利:

成功执行

我认为该错误也可能与错误和其他错误有关。

所以错误可能与对 CLDR 的更改有关,但我错过了它开始失败的原因(据了解,它应该是从 Java 9 的第一个版本开始,但它似乎适用于 Java 9.0.1) ,以及为什么它在 Java 11 中也以失败告终。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM