java判断两个时间段是否连续且不重合
时间: 2023-10-08 08:14:45 浏览: 166
可以先对两个时间段进行排序,然后比较两个时间段的结束时间和开始时间,如果结束时间小于等于开始时间,则不连续;如果结束时间大于开始时间,则再比较两个时间段的开始时间和结束时间,如果开始时间大于等于结束时间,则不重合;否则重合。
以下是示例代码:
```java
import java.text.SimpleDateFormat;
import java.util.Date;
public class TimeUtils {
/**
* 判断两个时间段是否连续且不重合
* @param startTime1 时间段1的开始时间
* @param endTime1 时间段1的结束时间
* @param startTime2 时间段2的开始时间
* @param endTime2 时间段2的结束时间
* @return 是否连续且不重合
*/
public static boolean isContinuousAndNotOverlap(Date startTime1, Date endTime1, Date startTime2, Date endTime2) {
// 对两个时间段进行排序
if (startTime1.after(endTime1)) {
Date temp = startTime1;
startTime1 = endTime1;
endTime1 = temp;
}
if (startTime2.after(endTime2)) {
Date temp = startTime2;
startTime2 = endTime2;
endTime2 = temp;
}
// 比较结束时间和开始时间
if (endTime1.getTime() <= startTime2.getTime()) {
// 不连续
return false;
} else {
// 比较开始时间和结束时间
return startTime1.getTime() >= endTime2.getTime() || endTime1.getTime() <= startTime2.getTime();
}
}
public static void main(String[] args) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startTime1 = sdf.parse("2021-01-01 10:00:00");
Date endTime1 = sdf.parse("2021-01-01 12:00:00");
Date startTime2 = sdf.parse("2021-01-01 12:00:00");
Date endTime2 = sdf.parse("2021-01-01 14:00:00");
System.out.println(isContinuousAndNotOverlap(startTime1, endTime1, startTime2, endTime2)); // true
startTime1 = sdf.parse("2021-01-01 10:00:00");
endTime1 = sdf.parse("2021-01-01 12:00:00");
startTime2 = sdf.parse("2021-01-01 13:00:00");
endTime2 = sdf.parse("2021-01-01 14:00:00");
System.out.println(isContinuousAndNotOverlap(startTime1, endTime1, startTime2, endTime2)); // false
startTime1 = sdf.parse("2021-01-01 10:00:00");
endTime1 = sdf.parse("2021-01-01 12:00:00");
startTime2 = sdf.parse("2021-01-01 12:00:00");
endTime2 = sdf.parse("2021-01-01 13:00:00");
System.out.println(isContinuousAndNotOverlap(startTime1, endTime1, startTime2, endTime2)); // false
}
}
```
阅读全文