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