【发布时间】:2020-10-14 06:51:53
【问题描述】:
我要检查区间B,是否在区间A? 我的解决方案正确吗?
解决方案:
Date fromA;
Data toA;
Date fromB;
Date toB;
if(fromA.getTime() <= fromB.getTime() && toB.getTime() <= toA.getTime()){
// true
}
【问题讨论】:
我要检查区间B,是否在区间A? 我的解决方案正确吗?
解决方案:
Date fromA;
Data toA;
Date fromB;
Date toB;
if(fromA.getTime() <= fromB.getTime() && toB.getTime() <= toA.getTime()){
// true
}
【问题讨论】:
回答,您是否是指(非)重叠范围(而不是完全包含在其他范围内):
最容易看出正确性的是排除范围;然后否定条件。
范围 (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 的端口,它提供更多功能, 并使条件可读。
【讨论】:
您的代码检查 B 是否在 A 中,而不是相反。
【讨论】: