"java 判断两个时间段是否重叠的案例"
本文主要介绍了如何在 Java 中判断两个时间段是否重叠的案例。时间段是指具有起始时间和终止时间的时间范围,在实际开发中,我们经常需要判断两个时间段是否存在重叠的情况。下面,我们将通过代码实现来详细介绍如何判断两个时间段是否重叠。
我们需要定义一个时间段的概念。一个时间段包含起始时间和终止时间这两个时间点。为了保证时间段的有效性,需要保证起始时间在终止时间之前。我们可以使用 Java 的 LocalDateTime 来存取或推断时间。
接下来,我们可以定义四个比较先后挨次的方法,分别为:小于、大于、小于等于、大于等于。这些方法可以帮助我们判断两个时间段之间的关系。
在判断两个时间段是否重叠时,我们可以使用以下思路:当整个时间段作为一个整体时,只有时间段小于或大于另一个时间段时,它们才没有重叠的交集。
下面是实现代码:
```java
package com.abc.common.util;
import lombok.Data;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class DateUtil {
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;
// 这里业务需要,允许时间点的重叠
// 例如某个时间段的起始时间:2021-06-29 00:00:00
// 和另一个时间段的终止时间:2021-06-29 00:00:00
// 它们俩可以有交点。假如不需要这种规律只把 le 改成lt
// ,ge 改成 gt 就可
return !(le(previous, next) || ge(previous, next));
}
public static TimeSlot buildSlot(LocalDateTime startTime, LocalDateTime endTime) {
return new TimeSlot(startTime, endTime);
}
private static boolean le(TimeSlot prev, TimeSlot next) {
return lt(prev, next) || next.endTime.isEqual(prev.startTime);
}
private static boolean ge(TimeSlot prev, TimeSlot next) {
return gt(prev, next) || prev.endTime.isEqual(next.startTime);
}
private static boolean gt(TimeSlot prev, TimeSlot next) {
// implementation omitted
}
}
```
在上面的代码中,我们首先定义了一个 TimeSlot 类,用于表示时间段。然后,我们实现了 overlapped 方法,用于判断两个时间段是否重叠。该方法首先确定两个时间段的先后顺序,然后使用 le 和 ge 方法来判断两个时间段是否重叠。如果两个时间段没有重叠的交集,则返回 true,否则返回 false。
在业务中,我们可以使用这个方法来判断两个时间段是否重叠,从而避免时间段的重叠冲突。
本文介绍了如何在 Java 中判断两个时间段是否重叠的案例,并提供了一份实现代码。该方法可以帮助开发者在实际开发中解决时间段重叠的问题。
- 1
- 2
前往页