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

Java 检查未来时间(历元毫秒)是否在当前时间(历元毫秒)的3小时内,java,Java,我试着比较两次,看看未来的时间是否在当前时间的3小时之内 下面是我尝试过的一些代码,其中我尝试将未来时间减去10800000,如果当前时间大于或等于差值,则应返回true。我不知道10800000是否是正确的用法,因为有时它会在应该的时候返回真/假 public static Boolean checkIfWithin3Hours(long startTime, long currentTime){ if(currentTime >= startTime - (1

我试着比较两次,看看未来的时间是否在当前时间的3小时之内

下面是我尝试过的一些代码,其中我尝试将未来时间减去10800000,如果当前时间大于或等于差值,则应返回true。我不知道10800000是否是正确的用法,因为有时它会在应该的时候返回真/假

  public static Boolean checkIfWithin3Hours(long startTime, long currentTime){
           if(currentTime >= startTime - (10800000)) {
            return true;
        }
        return false;
  }
如果以毫秒为单位的历元时间与以毫秒为单位的未来时间相差3小时以内,我希望它返回true

1000 milliseconds/second
60 seconds/minute
60 minutes/hour
3 hours
把它们相乘,得到10800000毫秒。第一步,你的号码是正确的

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

如果timeTesting在从现在起3小时的范围内,则timeNow 把它们相乘,得到10800000毫秒。第一步,你的号码是正确的

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

如果timeTesting在3小时的范围内,则timeNow tl;博士 您的问题令人困惑,不清楚业务逻辑的确切细节。但这会让你找到正确的方向

Instant
.ofEpochSecond( … )
.minus(
    Duration
    .ofHours( 3 ) 
)
.isBefore( 
    Instant.now()
)
java.time 我们有这方面的课程。不要使用自己的日期时间解决方案

Instant
以UTC为单位获取当前时刻

Instant now = Instant.now() ; 
持续时间
将等待时间指定为
持续时间
,这是一个与时间线无关的时间跨度

Duration d = Duration.ofHours( 3 ) ;
指定开始时间。您没有解释,但很明显,从UTC 1970年第一个时刻(1970-01-01T00:00Z)的历元参考开始,开始时刻是以整秒计的。将该数字粘贴为
即时

Instant start = Instant.ofEpochSecond( 10_800_000L ) ;
加上我们的持续时间来确定我们目标的时刻

Instant limit = start.plus( d ) ;
与当前时刻相比

Boolean pastLimit = now.isAfter( limit ) ;
提示:不要将时间仅仅作为一个整数来跟踪。这样做容易混淆和出错,使调试变得困难。使用适当的数据类型。在代码周围传递
Instant
对象,而不是秒数

间隔
或者,通过一个额外的库来获得fancier

将三个额外的库添加到项目中。我们希望使用
Interval
类,该类将时间跨度作为一对
Instant
对象附加到时间轴上

将持续时间添加到起始
时刻,然后添加到
时刻

Interval interval = Interval.of( then , then.plus( d ) ; 
测试当前力矩是否在该间隔内

Boolean nowInInterval = interval.contains( now ) ;
tl;博士 您的问题令人困惑,不清楚业务逻辑的确切细节。但这会让你找到正确的方向

Instant
.ofEpochSecond( … )
.minus(
    Duration
    .ofHours( 3 ) 
)
.isBefore( 
    Instant.now()
)
java.time 我们有这方面的课程。不要使用自己的日期时间解决方案

Instant
以UTC为单位获取当前时刻

Instant now = Instant.now() ; 
持续时间
将等待时间指定为
持续时间
,这是一个与时间线无关的时间跨度

Duration d = Duration.ofHours( 3 ) ;
指定开始时间。您没有解释,但很明显,从UTC 1970年第一个时刻(1970-01-01T00:00Z)的历元参考开始,开始时刻是以整秒计的。将该数字粘贴为
即时

Instant start = Instant.ofEpochSecond( 10_800_000L ) ;
加上我们的持续时间来确定我们目标的时刻

Instant limit = start.plus( d ) ;
与当前时刻相比

Boolean pastLimit = now.isAfter( limit ) ;
提示:不要将时间仅仅作为一个整数来跟踪。这样做容易混淆和出错,使调试变得困难。使用适当的数据类型。在代码周围传递
Instant
对象,而不是秒数

间隔
或者,通过一个额外的库来获得fancier

将三个额外的库添加到项目中。我们希望使用
Interval
类,该类将时间跨度作为一对
Instant
对象附加到时间轴上

将持续时间添加到起始
时刻,然后添加到
时刻

Interval interval = Interval.of( then , then.plus( d ) ; 
测试当前力矩是否在该间隔内

Boolean nowInInterval = interval.contains( now ) ;

我明白了,我猜我打字和解释让我意识到我做错了什么。把两次时间放在错误的位置。
TimeUnit.HOURS.toMillis(3)
将小时转换为毫秒。如果你只知道两个纪元,那么
3*60*60*1000
对于两张邮票之间是否有3小时是一个足够好的估计。如果您还知道时区,您将在中计算,您可以使用
zoneDateTime
对象和
HOURS.between(start,current)>=3
。这样你就更清楚你想要什么了。无论你是与3*60*60*100还是与小时数相比,都是一样的。由于您将currentTime和startTime都作为输入传递,因此它将始终为给定输入提供确定性结果。函数中没有日期,只是比较长值。你能分享一个你观察到随机输出的示例输入吗?这个问题很混乱。你不能用一句简单的话来陈述你的业务逻辑吗?小贴士:用通俗易懂的英语清楚地定义你的目标将有助于引导你明确代码。我猜出来了,我打字并解释它让我意识到我做错了什么。把两次时间放在错误的位置。
TimeUnit.HOURS.toMillis(3)
将小时转换为毫秒。如果你只知道两个纪元,那么
3*60*60*1000
对于两张邮票之间是否有3小时是一个足够好的估计。如果您还知道时区,您将在中计算,您可以使用
zoneDateTime
对象和
HOURS.between(start,current)>=3
。这样你就更清楚你想要什么了。无论你是与3*60*60*100还是与小时数相比,都是一样的。由于您将currentTime和startTime都作为输入传递,因此它将始终为给定输入提供确定性结果。函数中没有日期,只是比较长值。你能分享一个你观察到随机输出的示例输入吗?这个问题很混乱。你不能用一句简单的话来陈述你的业务逻辑吗?提示:明确定义y