有没有办法用Java表示无限的未来/时间的终结?

有没有办法用Java表示无限的未来/时间的终结?,java,datetime,java-8,Java,Datetime,Java 8,到目前为止,我一直在使用Instant.MAX来表示无限的未来或时间的结束。例如,在计算时间戳集合的最小时间戳时: Iterator<Instant> it = .... Instant minTs = Instant.MAX; while(it.hasNext()) { Instant curr = it.next(); minTs = curr.isBefore(minTs) ? curr : minTs; } 迭代器it=。。。。 速溶薄荷糖=Instant.M

到目前为止,我一直在使用
Instant.MAX
来表示无限的未来或时间的结束。例如,在计算时间戳集合的最小时间戳时:

Iterator<Instant> it = ....

Instant minTs = Instant.MAX;
while(it.hasNext()) {
  Instant curr = it.next();
  minTs = curr.isBefore(minTs) ? curr : minTs; 
}

迭代器it=。。。。
速溶薄荷糖=Instant.MAX;
while(it.hasNext()){
即时货币=it.next();
薄荷糖=当前薄荷糖(薄荷糖)?当前薄荷糖;
}
但我意识到使用
Instant.MAX
来表示“无限未来”有几个问题:

  • Instant.MAX
    OffsetDateTime.MAX
  • Instant.MAX.toEpochMilli()
    引发了
    算术异常:long overflow
    ,因此有时我使用
    Instant.ofEpochMilli(long.MAX_值)
    而不是
    Instant.MAX
    ,这不是很能揭示意图

所以我想知道,在
java.time.*
或其他可选的java时间库中,是否有更好的方法来表示时间的结束?

我们一直使用占位符,它可以在sql、java和任何其他相关编程语言中使用。占位符被选择为可互操作的,并避免诸如以下恼人的问题:

Instant.MAX.toEpochMilli()
引发
算术异常

9999-12-31 00:00:00Z
是我们使用的。它足够小,可以容纳所有
java.time
类型,也可以容纳
java.sql.Timestamp
(不过要注意时区问题)。它足够大,可以有效地代表“永远”。你、我和我们认识的每个人都将在
9999-12-31 00:00:00Z
被认为“很快”之前死去很久

例如,在计算时间戳集合的最小时间戳时

对于这个特定用例,您不需要“max”:

Instant findMin(迭代器iter){
如果(!iter.hasNext()){
返回null;
}
速溶薄荷糖=iter.next();
while(iter.hasNext()){
瞬时电流=iter.next();
造币厂=。。。;
}
归还薄荷糖;
}
不确定这个用例是真实的还是只是用来说明问题的

Instant findMin(Iterator<Instant> iter) {
    if (!iter.hasNext()) {
        return null;
    }

    Instant minTs = iter.next();

    while (iter.hasNext()) {
        Instant curr = iter.next();

        minTs = ...;
    }

    return minTs;
}