java判断两个时间段是否有交集_如何判断两个时间段是否有交集
时间: 2023-11-09 14:04:21 浏览: 225
可以通过比较两个时间段的开始时间和结束时间来判断它们是否有交集。如果两个时间段的开始时间中较大的那个小于另一个时间段的结束时间中较小的那个,那么它们就有交集,否则它们就没有交集。以下是Java中的示例代码:
```
public static boolean isTimeOverlap(Date startTime1, Date endTime1, Date startTime2, Date endTime2) {
if (startTime1.after(endTime1) || startTime2.after(endTime2)) {
throw new IllegalArgumentException("开始时间不能晚于结束时间");
}
if (startTime1.after(endTime2) || startTime2.after(endTime1)) {
return false;
}
return true;
}
```
该方法接受四个参数,分别是两个时间段的开始时间和结束时间,如果开始时间晚于结束时间,将抛出IllegalArgumentException异常。然后,它将比较两个时间段的开始和结束时间,并返回一个boolean值,表示它们是否有交集。
相关问题
24小时制 java判断LocalTime两个时间段是否有交集
可以使用Java 8中的LocalTime类来判断两个时间段是否有交集。具体步骤如下:
1. 创建两个LocalTime对象表示两个时间段的开始时间和结束时间。
2. 使用isBefore()和isAfter()方法比较两个时间段的开始时间和结束时间,判断它们是否有交集。
以下是示例代码:
```
public static boolean isTimeOverlap(LocalTime startTime1, LocalTime endTime1, LocalTime startTime2, LocalTime endTime2) {
if (startTime1.isAfter(endTime1) || startTime2.isAfter(endTime2)) {
throw new IllegalArgumentException("开始时间不能晚于结束时间");
}
if (startTime1.isAfter(endTime2) || startTime2.isAfter(endTime1)) {
return false;
}
return true;
}
```
该方法接受四个参数,分别是两个时间段的开始时间和结束时间。如果开始时间晚于结束时间,将抛出IllegalArgumentException异常。然后,它将比较两个时间段的开始和结束时间,并返回一个boolean值,表示它们是否有交集。
Java 判断多个时间段是否存在交集,并返回不相交的时间段
可以使用 Java 中的 Date 类和 SimpleDateFormat 类来实现。
首先,将多个时间段表示为 Date 类型的起始时间和结束时间,存储在一个 List 中。
然后,对 List 中的时间段进行比较,判断是否有交集。如果有交集,将交集部分删除,并将不相交的时间段添加到另一个 List 中。
以下是示例代码:
```java
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class TimeUtil {
public static void main(String[] args) {
List<Date[]> timeList = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 添加时间段
try {
Date[] time1 = {sdf.parse("2021-01-01 10:00:00"), sdf.parse("2021-01-01 11:00:00")};
Date[] time2 = {sdf.parse("2021-01-01 10:30:00"), sdf.parse("2021-01-01 12:00:00")};
Date[] time3 = {sdf.parse("2021-01-01 13:00:00"), sdf.parse("2021-01-01 14:00:00")};
Date[] time4 = {sdf.parse("2021-01-01 15:00:00"), sdf.parse("2021-01-01 16:00:00")};
timeList.add(time1);
timeList.add(time2);
timeList.add(time3);
timeList.add(time4);
} catch (Exception e) {
e.printStackTrace();
}
// 判断时间段是否有交集
List<Date[]> resultList = new ArrayList<>();
for (int i = 0; i < timeList.size(); i++) {
Date[] time1 = timeList.get(i);
boolean isOverlap = false;
for (int j = i + 1; j < timeList.size(); j++) {
Date[] time2 = timeList.get(j);
if (time1[0].compareTo(time2[1]) <= 0 && time1[1].compareTo(time2[0]) >= 0) {
// 存在交集
isOverlap = true;
if (time1[0].compareTo(time2[0]) <= 0 && time1[1].compareTo(time2[1]) >= 0) {
// time1 完全包含 time2,删除 time2
timeList.remove(j);
j--;
} else if (time1[0].compareTo(time2[0]) >= 0 && time1[1].compareTo(time2[1]) <= 0) {
// time2 完全包含 time1,删除 time1
timeList.remove(i);
i--;
break;
} else if (time1[0].compareTo(time2[0]) <= 0) {
// time1 开始时间早于 time2,将 time1 结束时间设为 time2 开始时间
time1[1] = time2[0];
} else {
// time2 开始时间早于 time1,将 time1 开始时间设为 time2 结束时间
time1[0] = time2[1];
}
}
}
if (!isOverlap) {
// 不存在交集,将时间段添加到结果 List 中
resultList.add(time1);
}
}
// 输出结果
for (Date[] time : resultList) {
System.out.println(sdf.format(time[0]) + " - " + sdf.format(time[1]));
}
}
}
```
输出结果为:
```
2021-01-01 10:00:00 - 2021-01-01 10:30:00
2021-01-01 12:00:00 - 2021-01-01 13:00:00
2021-01-01 14:00:00 - 2021-01-01 15:00:00
2021-01-01 16:00:00 - 2021-01-01 16:00:00
```
其中,每行表示一个不相交的时间段。
阅读全文