我正在尝试创建一个函数来检查2个日期周期是否重叠。例如:
1 July 2019 - 5th July 2019
和2nd July 2019 - 4th July 2019
将在两个日期周期重叠时返回true
1 July 2019 - 5th July 2019
和13th July 2019 - 24th July 2019
将返回false
,因为两个日期段不重叠
比较这两个日期时,我得到了错误的答案
24 March 2019 - 27 March 2019
和27 March 2019 - 29 March 2019
。我得到答案false
。尽管答案应该是true
,因为我算了算在内。
我该如何解决?
import java.time.LocalDate;
import java.time.Month;
public class TestClass {
public static void main(String[] args) {
LocalDate start1 = LocalDate.of(2019, Month.MARCH, 24);
LocalDate end1 = LocalDate.of(2019, Month.MARCH, 27);
LocalDate start2 = LocalDate.of(2019, Month.MARCH, 27);
LocalDate end2 = LocalDate.of(2019, Month.MARCH, 29);
boolean ans = dateOverlaps(start1, end1, start2, end2);
System.out.println(ans);
}
public static boolean dateOverlaps(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2) {
return start2.isBefore(end1) && end2.isAfter(start1);
}
}
答案 0 :(得分:1)
对于条件的第一部分,您确实需要之前或之后,对于第二部分,同样地,之前或之后(因为开始日期和结束日期包括在内)。没有一种方法可以实现,但是有几种方法可以将其放入代码中。例如:
return (start2.isBefore(end1) || start2.isEqual(end1))
&& (end2.isEqual(start1) || end2.isAfter(start1));
通过此更改,您的程序将打印:
true
我个人更喜欢矮一些但也有些棘手的东西:
return ! (start2.isAfter(end1) || end2.isBefore(start1));
结果是相同的。我把逻辑倒过来了:如果两个周期都不在周期1之后,或者周期1相反,那么周期就会重叠。