检查 2 个日期期间是否重叠时输出错误

Getting wrong output when checking if 2 date periods overlap

我正在尝试创建一个函数来检查 2 个日期周期是否重叠。例如:

1 July 2019 - 5th July 20192nd July 2019 - 4th July 2019 会 return true 因为 2 个日期周期重叠

1 July 2019 - 5th July 201913th July 2019 - 24th July 2019 会 return false 因为 2 个日期周期不重叠

我比较这两个日期时得到了错误的答案 24 March 2019 - 27 March 201927 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); 
    }
}

对于条件的第一部分,您确实需要 before or on,第二部分同样需要 on or after(因为您包括开始日期和结束日期)。没有一种方法可以做到这一点,但有几种方法可以将其放入代码中。例如:

    return (start2.isBefore(end1) || start2.isEqual(end1)) 
            && (end2.isEqual(start1) || end2.isAfter(start1)); 

通过此更改,您的程序打印:

true

就我个人而言,我更喜欢较短但也有点棘手的方法:

    return ! (start2.isAfter(end1) || end2.isBefore(start1)); 

结果是一样的。我已经颠倒了逻辑:如果第 2 期既不是在第 1 期之后也不出现在第 1 期之后,则周期重叠。