gpt4 book ai didi

java - 有什么方法可以在Java中表示无限的 future /时间的结束吗?

转载 作者:行者123 更新时间:2023-12-02 09:19:05 27 4
gpt4 key购买 nike

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

Iterator<Instant> it = ....

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

但我意识到使用 Instant.MAX 来表示“无限的 future ”存在几个问题:

  • Instant.MAXOffsetDateTime.MAX 不同
  • Instant.MAX.toEpochMilli() 引发 ArithmeticException: long Overflow,因此有时我会使用 Instant.ofEpochMilli(Long.MAX_VALUE) Instant.MAX 这不是很能揭示意图。
  • ...

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

最佳答案

我们一直使用占位符,它适用于 sql、java 以及任何其他相关的编程语言。选择的占位符是为了可互操作并避免烦人的问题,例如:

Instant.MAX.toEpochMilli() raises ArithmeticException

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

For example when calculating the minimum timestamp of a collection of timestamps

对于这个特定的用例,您不需要“最大值”:

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

Instant minTs = iter.next();

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

minTs = ...;
}

return minTs;
}

不确定这个用例是真实的还是只是用来说明问题的。

关于java - 有什么方法可以在Java中表示无限的 future /时间的结束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58808516/

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