java如何检查一个日期周期是否与另一个日期周期重叠
我创建了一个名为isDateOverlapping
的函数。它接受(所有类型的LocalDate
):
- 开始日期1
- 结束日期1
- 开始日期2
- 结束日期2
这个函数的作用是告诉我这两个日期周期是否重叠
例如,如果我从2019-06-15 to 2019-06-18
开始有一个句点,从2019-06-15 to 2019-06-12
开始有另一个句点。它将返回true,因为两个日期周期重叠
然而,我的函数似乎并不总是返回正确的答案。你能帮忙吗
public boolean isDateOverlapping(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2) {
if (start1.isAfter(start2) && start2.isBefore(start1)) {
return true;
} else if (end1.isBefore(end2) && start1.isAfter(start2)) {
return true;
} else if (start1.isAfter(end1) && end2.isBefore(start2)) {
return true;
}
return false;
}
# 1 楼答案
它们可以说明如下:
在这4种情况中,常见的不变量是第二个间隔必须在第一个间隔结束之前开始,第二个间隔必须在第一个间隔开始之后结束
这将为您提供:
请注意,如果希望在间隔在单个点重叠时方法返回true,则可能需要进行小的更改。在这种情况下,您需要将
start2.isBefore(end1)
替换为!start2.isAfter(end1)
,将end2.isAfter(start1)
替换为!end2.isBefore(start1)
还要注意,我假设
start1 <= end1
和start2 <= end2
。如果情况并非总是如此,那么在检查上述条件之前,您也必须检查它,并在必要时将startN与endN交换# 2 楼答案
确定两个日期周期仅在逻辑下方重叠是否足够
(StartDate1 <= EndDate2) and (StartDate2 <= EndDate1)