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 ) ;
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;
}
添加回答
举报