如何有效地检查日期范围是否重叠?

时间:2016-01-13 18:56:54

标签: java date

基本上我正在寻找的是防止日期相互重叠的更好方法。因此,如果我已经创建了一个事件,比如2016年10月10日到2016年9月15日之间的事件,那么我创建的下一个事件就不会介于这两个日期之间。

这里的代码是我到目前为止所做的,但我觉得它很乱,我甚至不确定它是否正常工作。

(fromDate.isAfter(element.getFromDate()) && fromDate.isBefore(element.getToDate()) || toDate.isAfter(element.getFromDate()) && toDate.isBefore(element.getToDate()) || fromDate.isBefore(element.getFromDate()) && toDate.isAfter(element.getToDate()) || fromDate.isEqual(element.getFromDate()) && toDate.isEqual(element.getToDate()) || fromDate.isBefore(element.getFromDate()) && toDate.isEqual(element.getToDate()) || fromDate.isEqual(element.getFromDate()) && toDate.isAfter(element.getToDate()))

我正在使用java.time.LocalDate

1 个答案:

答案 0 :(得分:4)

这很麻烦,可以大大简化。以下是两个日期范围重叠的所有可能性。称他们为'a,b'和'x,y':

              x     y      
        -------------------
        a  b                    no overlap
                      a b       no overlap

                a b             full overlap
        a                b      full overlap
        a     b                 partial   (b = x)
        a        b              partial 
        a           b           partial   (b = y)
        a                b      partial
              a          b      partial   (a = x)
                 a       b      partial
                    a    b      partial   (a = y)

由于你只对重叠案例感兴趣,你可以简单地反转逻辑并检查NO重叠,归结为:

if (!((b < x) || (a > y)))