LocalTime startTime = LocalTime.parse("12:00"); LocalTime endTime = LocalTime.parse("13:00"); System.out.println(isOverlap(startTime, endTime, LocalTime.parse("00:00"), LocalTime.parse("12:00"))); } public static boolean isOverlap(LocalTime intervalStart, LocalTime intervalEnd, LocalTime rangeStart, LocalTime rangeEnd) { boolean overlap = false; boolean rangeCrossMidnight = rangeEnd.isBefore(rangeStart); LocalTime rangeEndAdjusted = rangeEnd; // 如果时间范围跨越了一天,将结束时间加上一天 if (rangeCrossMidnight) { rangeEndAdjusted = rangeEndAdjusted.plusNanos(1); } // 如果时间段的结束时间早于开始时间,则加上一天 if (intervalEnd.isBefore(intervalStart)) { intervalEnd = intervalEnd.plusSeconds(Duration.between(intervalStart, LocalTime.MAX).getSeconds() + 1); } if (rangeCrossMidnight) { overlap = !(intervalStart.isBefore(rangeStart) && intervalEnd.isAfter(rangeEndAdjusted)); } else { overlap = !(intervalEnd.isBefore(rangeStart) || intervalStart.isAfter(rangeEndAdjusted)); } return overlap; }
时间: 2024-03-08 16:44:59 浏览: 65
选择开始时间和结束时间
这段代码实现了判断两个时间段是否有重叠的功能。其中,isOverlap方法接收四个参数,分别是intervalStart,intervalEnd,rangeStart,rangeEnd,分别表示时间段1的开始时间、结束时间,时间段2的开始时间、结束时间。该方法返回一个boolean值,表示两个时间段是否有重叠。如果有重叠,返回true,否则返回false。
该方法的实现思路是先判断时间范围是否跨越了一天,如果跨越了一天,则将结束时间加上一天,然后再判断时间段的结束时间是否早于开始时间,如果是,则将时间段的结束时间加上一天。最后,根据时间段和时间范围的开始时间和结束时间的关系,判断两个时间段是否有重叠。如果时间范围跨越了一天,则只需要判断时间段的开始时间是否在时间范围内即可;否则,需要判断时间段的结束时间是否在时间范围内。如果时间段和时间范围存在重叠,返回false,否则返回true。
阅读全文