基本上我正在寻找的是防止日期相互重叠的更好方法。因此,如果我已经创建了一个事件,比如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
答案 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)))