我目前正在尝试解决我的 Java 代码的问题。本质上,我必须变量:
currentTime
类型的Instant
和activeAfterSecond
类型的Duration
(来自java.time包)。
基本上我想做的是检查 currentTime 是否已经超过持续时间(或达到它)。所以在伪代码中是这样的:
if(currentTime >= duration){
// do something
}
显然这样的方法是行不通的,因为“瞬间”和“持续时间”无法相互准备。我一直在尝试找出 java.time.Instant 和 java.time.Duration 包中的哪种方法最适合比较(例如,使用 Duration 包中的
getSeconds()
之类的方法),但一直无法找到正确、可行的解决方案。
有人知道我该如何解决这个问题吗?帮助将不胜感激!
你需要一个有效的“锚点”(开始时间、纪元,无论你想怎么称呼它)——如果你愿意的话,你可以将其算作“持续时间 0”的那一刻。
例如,2024-08-14T17:05:00Z 是否晚于“一小时”的持续时间?例如,如果锚点是 2024-08-14T16:00:00Z,则为 ,但如果锚点为 2024-08-14T16:15:00Z,则不是。
一旦你决定了你的“锚点”,那就更容易了 - 只需将持续时间添加到锚点即可计算出你希望结果从 false 变为 true 的时刻,然后你就得到了两个要比较的瞬间 - 这是非常直接支持的。没有锚点,就没有有意义的比较。这不是实现方面:它是您要进行比较的基础。
Instant
变量,以及
lastTime
(上一步的
currentTime
)。然后,你可以尝试这样的事情:
if (Duration.between (lastTime, currentTime) >= duration) {
// do Something
lastTime = currentTime;
}