有没有办法用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;
}