为了账号安全,请及时绑定邮箱和手机立即绑定

检查未来时间(纪元毫秒)是否在当前时间(纪元毫秒)的 3 小时内

检查未来时间(纪元毫秒)是否在当前时间(纪元毫秒)的 3 小时内

摇曳的蔷薇 2023-05-10 13:25:13
我正在尝试比较两次以查看未来时间是否在当前时间的接下来 3 小时内。下面是我尝试过的一些代码,我尝试将未来时间减去 10,800,000,如果当前时间大于或等于差值,它应该返回 true。我不知道使用 10,800,000 是否正确,因为有时它现在应该返回 true/false。  public static Boolean checkIfWithin3Hours(long startTime, long currentTime){           if(currentTime >= startTime - (10800000)) {            return true;        }        return false;  }如果以毫秒为单位的纪元时间在以毫秒为单位的未来时间的 3 小时内,我希望它返回 true。
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

您的问题令人困惑,不清楚您的业务逻辑的确切细节。但这应该让你指向正确的方向。

Instant
.ofEpochSecond( … )
.minus(
    Duration
    .ofHours( 3 ) 
)
.isBefore( 
    Instant.now()
)

java.time

我们有这方面的课程。不要推出自己的日期时间解决方案。

Instant

获取 UTC 的当前时刻。

Instant now = Instant.now() ;

Duration

将您的等待时间指定为Duration,一个未附加到时间线的时间跨度。

Duration d = Duration.ofHours( 3 ) ;

指定您的开始时间。你没有解释,但显然开始时刻是自 UTC 1970 年第一时刻 1970-01-01T00:00Z 的纪元参考以来的整秒数。将该数字粘贴为Instant.

Instant start = Instant.ofEpochSecond( 10_800_000L ) ;

添加我们的持续时间以确定我们的目标时刻。

Instant limit = start.plus( d ) ;

与当前时刻进行比较。

Boolean pastLimit = now.isAfter( limit ) ;

提示:不要将时间作为单纯的整数来跟踪。这样做会造成混淆并容易出错,使调试变得困难。使用适当的数据类型。在您的代码周围传递Instant对象,而不是秒数。

Interval

或者,使用额外的库变得更有趣。

ThreeTen-Extra库添加到您的项目中。我们希望使用表示Interval附加到时间轴的时间跨度的类作为一对Instant对象。

将持续时间添加到开始then时刻。

Interval interval = Interval.of( then , then.plus( d ) ;

测试当前时刻是否在该时间间隔内。

Boolean nowInInterval = interval.contains( now ) ;


查看完整回答
反对 回复 2023-05-10
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

1000 milliseconds/second

60 seconds/minute

60 minutes/hour

3 hours

将它们相乘,得到 10,800,000 毫秒。第一步,你的号码是正确的。


下一步,计算数字是否在范围内:


如果 timeTesting 在距现在 3 小时的范围内,则 timeNow <= timeTesting <= timeNow + 10,800,000 毫秒。


第二步,您的范围测试不正确。


用以下方法修复它:


public static Boolean checkIfWithin3Hours(long startTime, long currentTime){

    return startTime <= currentTime && currentTime <= startTime + 10800000;


查看完整回答
反对 回复 2023-05-10
  • 2 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信