我的时间A应该落在timeB的90分钟范围内(之前和之后)。
示例:如果timeB是4:00 pm,则时间A应该在2:30 pm(-90)到5:30 pm(+90)之间
尝试了以下内容:
if(timeA.isAfter(timeB.minusMinutes(90)) || timeA.isBefore(timeB.plusMinutes(90))) {
return isInRange;
}
您能帮我解决这里的逻辑问题吗?
正如@JB Nizet在评论中所说,您正在使用OR运算符(||
)。
因此,您正在测试A is after B - 90
OR A is before B + 90
。如果仅满足条件之一,则返回true
。
要检查是否A
在该范围内,必须满足两个条件,因此必须使用AND运算符(&&
):
if (timeA.isAfter(timeB.minusMinutes(90)) && timeA.isBefore(timeB.plusMinutes(90))) {
return isInRange;
}
但上面的代码不会返回true
,如果A
是正好前90分钟或之后B
。如果您希望true
当差值也恰好是90分钟时返回,则必须更改条件以进行检查:
// lower and upper limits
LocalDateTime lower = timeB.minusMinutes(90);
LocalDateTime upper = timeB.plusMinutes(90);
// also test if A is exactly 90 minutes before or after B
if ((timeA.isAfter(lower) || timeA.equals(lower)) && (timeA.isBefore(upper) || timeA.equals(upper))) {
return isInRange;
}
另一种选择是使用ajava.time.temporal.ChronoUnit
来获取A
和B
以分钟为单位的差,并检查其值:
// get the difference in minutes
long diff = Math.abs(ChronoUnit.MINUTES.between(timeA, timeB));
if (diff <= 90) {
return isInRange;
}
我使用过,Math.abs
因为如果A
在之后,则差可以为负B
(因此将其调整为正数)。然后,我检查差异是否小于(或等于)90分钟。if (diff < 90)
如果要排除“等于90分钟”的情况,可以将其更改为。
两种方法之间存在差异。
ChronoUnit
四舍五入。例如,如果A
在90分59秒后B
,将分差四舍五入为90分钟,if (diff <= 90)
将是true
,在使用isBefore
和equals
返回false
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句