java - Java/Scala 中无效的 ZoneDateTime 解析

标签 java scala

我正在尝试将日期从字符串解析为 ZonedDateTime我遇到了一个奇怪的问题。

2020-11-01T01:00-05:00[America/New_York]

这是今年美国东部时间结束后的一个小时。当我将它传递给ZonedDateTime.parse时我明白

ZonedDateTime.parse("2020-11-01T01:00-05:00[America/New_York]")
// 2020-11-01T01:00-04:00[America/New_York]

但如果我这样做

ZonedDateTime.parse("2020-11-01T01:00-04:00[America/New_York]").plusHours(1)

我明白

2020-11-01T01:00-05:00[America/New_York]

所以 Java 并不是不能表示这种不明确的值或其他东西..

任何人都可以向我解释这种行为和可能的解决方案吗?

注意:我使用的是 Java 8

最佳答案

正如 Amir Schnell 在评论中所说,这似乎是 bug在 JDK 中,因为它们无法在 Java 11 中重现这一点。

目前,我已经找到了解决办法:

将字符串解析为本地日期时间、区域 ID 和区域偏移量,并使用这三项创建 ZonedDateTime:

TemporalAccessor ta = DateTimeFormatter.ISO_ZONED_DATE_TIME.parse("2020-11-01T01:00-05:00[America/New_York]");
System.out.println(
    ZonedDateTime.ofLocal(
        LocalDateTime.from(ta), 
        ZoneId.from(ta), 
        ZoneOffset.from(ta)
    )
);

关于java - Java/Scala 中无效的 ZoneDateTime 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61266555/

相关文章:

scala - Scala中的"=>"运算符

mysql - 使用 Slick 3.0 连接到 Mysql - No username, no password and bogus driver does not equal error

java - 如何从 onclick 中刷新列表适配器

java - 如何在 Java 中实现正确的异常处理?

java - 在java中使用get参数获取所有值

java - 将 Angular + Spring Boot 部署到 Tomcat

java - 我无法关闭扫描仪

scala - 澄清永远不会完成的 Scala Future 及其对其他回调的影响

scala - 在列表上使用 .view 时出现奇怪的异常

Scala Map 模式匹配