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