Java 判断两个时间段是否重叠的案例 在 Java 中,判断两个时间段是否重叠是一种常见的需求,特别是在业务逻辑中需要检查时间段的交叉情况时。在本文中,我们将介绍如何使用 Java 判断两个时间段是否重叠,并提供相关的代码实现。 让我们定义一个时间段的概念。时间段是指一个具有起始时间和终止时间的时间区域。在 Java 中,我们可以使用 LocalDateTime 来表示时间点,使用 TimeSlot 类来表示时间段。 TimeSlot 类的构造方法需要保证起始时间在终止时间之前,这样才是一个有效的时间段概念。同时,我们需要定义四个比较先后顺序的方法,分别为小于、小于等于、大于和大于等于,以便比较两个时间段的先后顺序。 在判断两个时间段是否重叠时,我们可以使用以下逻辑:如果两个时间段的起始时间和终止时间不相交,那么它们就是不重叠的。如果两个时间段的起始时间和终止时间相交,那么它们就是重叠的。 下面是相关的代码实现: ```java package com.abc.common.util; import lombok.Data; import org.springframework.stereotype.Component; import java.time.LocalDateTime; / * 日期工具类 * <p> * 使用LocalDateTime存取或判断 * </p> * @see java.time.LocalDateTime * @date 2020-6-29 10:20:42 */ @Component public class DateUtil { / * 判断两个时间段是否重叠 * @param slot1 * @param slot2 * @return */ public static boolean overlapped(TimeSlot slot1, TimeSlot slot2) { TimeSlot previous, next; previous = slot1.startTime.isBefore(slot2.startTime) ? slot1 : slot2; next = slot2.startTime.isAfter(slot1.startTime) ? slot2 : slot1; // 这里业务需要,允许时间点的重叠 // 例如某个时间段的起始时间:2020-06-29 00:00:00 // 和另一个时间段的终止时间:2020-06-29 00:00:00 // 它们俩可以有交点。如果不需要这种逻辑只把le改成lt // ,ge改成gt就可 return !(le(previous, next) || ge(previous, next)); } / * 构造一个时间段 * @param startTime * @param endTime * @return */ public static TimeSlot buildSlot(LocalDateTime startTime, LocalDateTime endTime) { return new TimeSlot(startTime, endTime); } / * less equal * 小于等于 * @param prev * @param next * @return */ private static boolean le(TimeSlot prev, TimeSlot next) { return lt(prev, next) || next.endTime.isEqual(prev.startTime); } / * greater equal * 大于等于 * @param prev * @param next * @return */ private static boolean ge(TimeSlot prev, TimeSlot next) { return gt(prev, next) || prev.endTime.isEqual(next.startTime); } / * greater than * 大于 * @param prev * @param next * @return */ private static boolean gt(TimeSlot prev, TimeSlot next) { return prev.endTime.isBefore(next.startTime); } / * less than * 小于 * @param prev * @param next * @return */ private static boolean lt(TimeSlot prev, TimeSlot next) { return prev.endTime.isBefore(next.startTime); } } ``` 在上面的代码中,我们定义了一个名为 `DateUtil` 的工具类,用于判断两个时间段是否重叠。该类中包含四个比较先后顺序的方法,分别为小于、小于等于、大于和大于等于。我们使用 `LocalDateTime` 来表示时间点,并使用 `TimeSlot` 类来表示时间段。 在 `overlapped` 方法中,我们使用以下逻辑来判断两个时间段是否重叠:如果两个时间段的起始时间和终止时间不相交,那么它们就是不重叠的。如果两个时间段的起始时间和终止时间相交,那么它们就是重叠的。 在业务逻辑中,我们可以使用以下代码来判断两个时间段是否重叠: ```java TimeSlot slot1 = DateUtil.buildSlot(LocalDateTime.of(2020, 6, 29, 0, 0, 0), LocalDateTime.of(2020, 6, 30, 0, 0, 0)); TimeSlot slot2 = DateUtil.buildSlot(LocalDateTime.of(2020, 6, 28, 0, 0, 0), LocalDateTime.of(2020, 7, 1, 0, 0, 0)); if (DateUtil.overlapped(slot1, slot2)) { System.out.println("两个时间段重叠"); } else { System.out.println("两个时间段不重叠"); } ``` 在上面的代码中,我们使用 `buildSlot` 方法来构造两个时间段,然后使用 `overlapped` 方法来判断这两个时间段是否重叠。如果两个时间段重叠,那么输出“两个时间段重叠”,否则输出“两个时间段不重叠”。 本文介绍了如何使用 Java 判断两个时间段是否重叠,并提供了相关的代码实现。该方法可以应用于业务逻辑中,用于检查时间段的交叉情况。
- 粉丝: 6
- 资源: 909
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助