我正在尝试将日期从字符串解析为 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/