猿问

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

我正在尝试比较两次以查看未来时间是否在当前时间的接下来 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。


摇曳的蔷薇
浏览 115回答 2
2回答

温温酱

您的问题令人困惑,不清楚您的业务逻辑的确切细节。但这应该让你指向正确的方向。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 ) ;

慕桂英4014372

1000 milliseconds/second60 seconds/minute60 minutes/hour3 hours将它们相乘,得到 10,800,000 毫秒。第一步,你的号码是正确的。下一步,计算数字是否在范围内:如果 timeTesting 在距现在 3 小时的范围内,则 timeNow <= timeTesting <= timeNow + 10,800,000 毫秒。第二步,您的范围测试不正确。用以下方法修复它:public static Boolean checkIfWithin3Hours(long startTime, long currentTime){&nbsp; &nbsp; return startTime <= currentTime && currentTime <= startTime + 10800000;}&nbsp;
随时随地看视频慕课网APP

相关分类

Java
我要回答