Java 如何有效地检查日期范围是否为';不重叠?

Java 如何有效地检查日期范围是否为';不重叠?,java,date,Java,Date,所以基本上我在寻找一种更好的方法来防止日期重叠。因此,如果我已经在2016年9月10日至2016年9月15日之间创建了一个活动,那么我创建的下一个活动就不能在这两个日期之间 到目前为止,我已经有了这段代码,但我认为它很混乱,我甚至不确定它是否正常工作 (fromDate.isAfter(element.getFromDate())和&fromDate.isBefore(element.getToDate()) ||toDate.isAfter(element.getFromDate())和&to

所以基本上我在寻找一种更好的方法来防止日期重叠。因此,如果我已经在2016年9月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())
||isEqual(element.getFromDate())和&toDate.isAfter(element.getToDate())


我正在使用java.time.LocalDate,这很混乱,可以大大简化。以下是两个日期范围重叠的所有可能性。叫他们‘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)
由于您只对重叠案例感兴趣,因此可以简单地反转逻辑并检查是否存在重叠,这归结为:

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

这很混乱,可以大大简化。以下是两个日期范围重叠的所有可能性。叫他们‘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)
由于您只对重叠案例感兴趣,因此可以简单地反转逻辑并检查是否存在重叠,这归结为:

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

Guava有一个很好的RangeSet类,在这里很有用Guava有一个很好的RangeSet类,在这里很有用