gpt4 book ai didi

Java Instant 的 bug? `DateTimeException: Invalid value for Year`

转载 作者:行者123 更新时间:2023-12-01 07:17:31 26 4
gpt4 key购买 nike

根据documentation for Instant ,最小 Instant 为 -1000000000-01-01T00:00Z,因此年份为 -1000000000,时区为 UTC。所以我希望这个程序能够工作,并且 atOffset 是一个 noop:

import java.time.*;

public class A {
public static void main(String[] args) {
Instant i = Instant.MIN;
System.out.println(i);
System.out.println(i.atOffset(ZoneOffset.UTC));
}
}

但是它在 atOffset 上抛出此异常:

-1000000000-01-01T00:00:00Z
Exception in thread "main" java.time.DateTimeException: Invalid value for Year (valid values -999999999 - 999999999): -1000000000
at java.time.temporal.ValueRange.checkValidIntValue(ValueRange.java:330)
at java.time.temporal.ChronoField.checkValidIntValue(ChronoField.java:722)
at java.time.LocalDate.ofEpochDay(LocalDate.java:341)
at java.time.LocalDateTime.ofEpochSecond(LocalDateTime.java:422)
at java.time.OffsetDateTime.ofInstant(OffsetDateTime.java:328)
at java.time.Instant.atOffset(Instant.java:1195)
at A.main(A.java:7)

这是一个错误吗?根据该验证消息,最小年份是 -999999999,但文档显示它是 -1000000000

最佳答案

atOffset 返回 OffsetDateTime它有不同的最小/最大。

The minimum supported OffsetDateTime, '-999999999-01-01T00:00:00+18:00'.

The maximum supported OffsetDateTime, '+999999999-12-31T23:59:59.999999999-18:00'.

javadoc 提到这些最小/最大值源自 LocalDateTime以及最大区域偏移量,这似乎就是它们与即时不匹配的原因。

根据 Instant 的文档,Instant 双向多了一年的原因.

This is one year earlier than the minimum LocalDateTime. This provides sufficient values to handle the range of ZoneOffset which affect the instant in addition to the local date-time. The value is also chosen such that the value of the year fits in an int.

涵盖了 LocalDateTime + Offset 导致上一年时间的边缘情况。

最大实用值是转换为 Instant 的最小 OffsetDateTime,因为该日期之前的所有内容都是缓冲区,没有等效的 OffsetDateTime。

关于Java Instant 的 bug? `DateTimeException: Invalid value for Year`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54893892/

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