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