【问题标题】:I want to check the time interval我想检查时间间隔
【发布时间】: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
}

【问题讨论】:

    标签: java android time


    【解决方案1】:

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

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

    范围 (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”解释为 B 是 A 的子集。如果这是正确的解释,则 OP 条件是正确的。
    • @Henry 你是对的;我所有的用例都涉及重叠,而不是包含。我会在我的回答中添加一个相关的文字。
    【解决方案2】:

    您的代码检查 B 是否在 A 中,而不是相反。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 2021-06-30
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2011-03-12
      • 2016-06-17
      相关资源
      最近更新 更多