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

时间:2019-06-25 01:33:03

标签: java if-statement time boolean localdate

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

1 July 2019 - 5th July 20192nd July 2019 - 4th July 2019将在两个日期周期重叠时返回true

1 July 2019 - 5th July 201913th July 2019 - 24th July 2019将返回false,因为两个日期段不重叠

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

1 个答案:

答案 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相反,那么周期就会重叠。