[英]Why is it unparsable date with timezone WAT in Java9?
@Gibbs,确实,它失败了......
我无法使用已安装的 JDK 版本测试错误,但我遇到了您在屏幕截图中显示的在线编辑器。
这不是一个完整的答案,但让我解释一下我的发现。
首先,问题出现在 Java 版本 10.0.1 中。 使用SimpleDateFormat
或DateTimeFormatter
没有区别,所以我将使用第一个。
请看错误截图:
我的猜测是,该错误与 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.