首页 > 解决方案 > 我想检查时间间隔

问题描述

我想检查区间B,是否在区间A?我的解决方案正确吗?

解决方案:

Date fromA;
Data toA;
Date fromB;
Date toB;
if(fromA.getTime() <= fromB.getTime() &&  toB.getTime() <= toA.getTime()){
// true
}

标签: javaandroidtime

解决方案


回答,您是否是指(非)重叠范围(而不是完全包含在其他范围内):

最容易看到正确性的是排除范围;然后否定条件。

范围 (a1, a2) 和 (b1, b2):

boolean excluding = a2 <= b1 || b2 <= a1
boolean overlapping = a2 > b1 && b2 > a1    // Negation

所以有一个从一个的交叉结束与另一个的开始进行比较。

你的代码一定是错的。正确的:

if (tomA.getTime() >= fromB.getTime() &&  toB.getTime() >= fromAgetTime()) {

由于getTime()返回一个 long, ms sind 1970,可能在某一时刻被签名溢出。非常理论,但不是很好。

最好使用新的 java.time API 的端口,它提供更多功能,并使条件可读。


推荐阅读