如果两个时间段重叠,要检查什么代码?

时间:2018-11-04 08:56:43

标签: java

我想使用(PeriodAStart PeriodBStart)方法比较2个期间对象,以检查重叠和上一个期间之后1天。

LocalDate in = LocalDate.of(inYear, inMonth, inDay);
LocalDate out = LocalDate.of(outYear, outMonth, outDay);

if(checkAvailability(in, out)){
     Reservation newRes = new Reservation(in, out, rooms);
}

//

public static boolean checkAvailability(LocalDate in, LocalDate out) {
    FileManager.openCalendarFile();
    ArrayList<Calendar> caList = new ArrayList<>();
    caList = FileManager.getCalendar();
    boolean overlap = true;

    Period p = Period.between(in, out);

    for(Calendar cal : caList) {
        //TODO
    }
}

2 个答案:

答案 0 :(得分:0)

不可能使用句点,但是您可以执行以下操作:

LocalDate in = LocalDate.now().minusDays(100);
LocalDate out = LocalDate.now().plusDays(100);

LocalDate dateToCheck = LocalDate.now();

if (in.isBefore(dateToCheck) && out.isAfter(dateToCheck)) {
    System.out.println("dateToCheck within period of in-out");

}

在此示例中,我将今天设为dateToCheck,将in设为今天之前的100天,并将out设为今天之后的100天。上面的代码将打印dateToCheck within period of in-out,因为dateToCheck在该“期间”内。

答案 1 :(得分:0)

您似乎正在检查Calendar个对象是否落入Period中。

Calendar是错误的API。如果可能的话,建议您将FileManager.getCalendar()更改为返回LocalDate

此外,Period代表“ 5个月”和“ 7年”之类的内容。它没有起点和终点。

您应该先将Calendar转换为LocalDate

// write this in the for loop
LocalDate date = LocalDateTime.ofInstant(cal.toInstant(), cal.getTimeZone().toZoneId()).toLocalDate();

然后调用isAfterisBefore

if (out.isAfterDate(date) && in.isBefore(date)) {
    // the date falls between in and out.
}