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

标签 java date

所以基本上我正在寻找一种更好的方法来防止日期相互重叠。因此,如果我已经在 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()) || fromDate.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)))

关于java - 如何有效地检查日期范围是否不重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34774858/

相关文章:

php - 在 mysql 数据库中插入日期范围

javascript - Swift - 将 JSON 日期转换为 Swift 兼容日期

java - 如何使用Java反射从源代码中找出UML关联

java - 为什么我的 Go 数组排序代码比 Java 慢很多?

Java坐标系

javascript - 使用 Javascript 获取 future 日期

java - 如何创建自定义日期?

java - 删除字符串中除 之外的所有内容。以及 0-9 之间的数字 - Java

java - 解析运算符和操作数

java - SimpleDateFormat 的毫秒问题