哪些 MIN/MAX 值将同时适用于 ZonedDateTime 和 Instant.toEpochMilli?
我想使用可以在 和 之间转换的 MIN/MAX 时间值,用作筛选器/查询的哨兵值。ZonedDateTime
Instant.toEpochMilli()
我试过了:
OffsetDateTime.MIN.toInstant().toEpochMilli();
OffsetDateTime.MAX.toInstant().toEpochMilli();
但我得到这个例外:
java.lang.ArithmeticException: long overflow
at java.lang.Math.multiplyExact(Math.java:892)
at java.time.Instant.toEpochMilli(Instant.java:1237)
然后我尝试了这个:
ZonedDateTime.ofInstant(Instant.MIN, ZoneId.systemDefault());
ZonedDateTime.ofInstant(Instant.MAX, ZoneId.systemDefault());
但后来我得到了这个例外:
java.time.DateTimeException: Invalid value for Year (valid values -999999999 - 999999999): -1000000001
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.ZonedDateTime.create(ZonedDateTime.java:456)
at java.time.ZonedDateTime.ofInstant(ZonedDateTime.java:409)
我也试过“Z”:ZoneId
ZonedDateTime.ofInstant(Instant.MIN, ZoneId.of("Z"))
但这会返回与上一个相同的异常。
最后,我尝试了以下方法,它似乎有效:
ZonedDateTime.ofInstant(Instant.EPOCH, ZoneId.of("Z"));
ZonedDateTime.ofInstant(Instant.EPOCH.plusMillis(Long.MAX_VALUE), ZoneId.of("Z"));
这是最好的解决方案吗?