gpt4 book ai didi

java - LocalTime.parse 在 JDK 12 上表现不同

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:05:57 26 4
gpt4 key购买 nike

我有以下代码可以在 Oracle JDK 10 上完美运行

public static void main(String[] args) {
final var localTime = LocalTime.parse("8:00AM", DateTimeFormatter.ofPattern("h:mma"));
System.out.println("Local time is " + localTime);
}

它输出以下...

Local time is 08:00

当我在 OpenJDK 12 上运行相同的代码时,我得到了这个...

Exception in thread "main" java.time.format.DateTimeParseException: Text '8:00AM' could not be parsed at index 4
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2049)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1951)
at java.base/java.time.LocalTime.parse(LocalTime.java:463)
at com.virtualenergyservices.portal.backend.bootstrap.FacilitiesImporter.main(FacilitiesImporter.java:909)

有没有人有什么想法?

最佳答案

JDK 11 已更新为使用 CLDR v33 (请参阅发行说明:Updated Locale Data to Unicode CLDR v33)。 CLDRJDK8 和更早版本中默认的 JRE locale 数据相比有很多变化。这会导致在解析某些 locale 时抛出异常- 与以前的 JDK 版本配合良好的依赖字段。

您的测试用例中的代码无法正常工作,因为对于 en_CA 语言环境和 CLDR v33dayperiod看起来像 a.m./p.m.。所以,这里有两个选项:

  1. 更新代码以使用 CLDR 指定的格式,如下所示:

    public static void main(String[] args) {
    Locale.setDefault(new Locale("en", "CA"));
    final var localTime = LocalTime.parse("8:00a.m.", DateTimeFormatter.ofPattern("h:mma"));
    System.out.println("Local time is " + localTime);
    }
  2. 使用兼容性开关 -Djava.locale.providers=COMPAT ,它支持与 JRE 绑定(bind)的语言环境数据,它曾经是 JDK8 及更早版本。当使用上述选项运行时,"8:00AM" 将使用 JDK12 正确解析。

关于java - LocalTime.parse 在 JDK 12 上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55483791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com