在java中比较Instant是否已经过了Duration

问题描述 投票:0回答:2

我目前正在尝试解决我的 Java 代码的问题。本质上,我必须变量:

currentTime
类型的
Instant
activeAfterSecond
类型的
Duration
(来自java.time包)。 基本上我想做的是检查 currentTime 是否已经超过持续时间(或达到它)。所以在伪代码中是这样的:

if(currentTime >= duration){
   // do something
}

显然这样的方法是行不通的,因为“瞬间”和“持续时间”无法相互准备。我一直在尝试找出 java.time.Instant 和 java.time.Duration 包中的哪种方法最适合比较(例如,使用 Duration 包中的

getSeconds()
之类的方法),但一直无法找到正确、可行的解决方案。

有人知道我该如何解决这个问题吗?帮助将不胜感激!

java time duration
2个回答
2
投票

你需要一个有效的“锚点”(开始时间、纪元,无论你想怎么称呼它)——如果你愿意的话,你可以将其算作“持续时间 0”的那一刻。

例如,2024-08-14T17:05:00Z 是否晚于“一小时”的持续时间?例如,如果锚点是 2024-08-14T16:00:00Z,则为 ,但如果锚点为 2024-08-14T16:15:00Z,则不是。

一旦你决定了你的“锚点”,那就更容易了 - 只需将持续时间添加到锚点即可计算出你希望结果从 false 变为 true 的时刻,然后你就得到了两个要比较的瞬间 - 这是非常直接支持的。

没有锚点,就没有有意义的比较。这不是实现方面:它是您要进行比较的基础。


0
投票
您需要另一个

Instant

 变量,以及 
lastTime
(上一步的 
currentTime
)。然后,你可以尝试这样的事情:

if (Duration.between (lastTime, currentTime) >= duration) { // do Something lastTime = currentTime; }
    
© www.soinside.com 2019 - 2024. All rights reserved.