JAVA 1.传入工作时间段字符串 格式为HH:mm-HH:mm;HH:mm-HH:mm;... 2.传入空闲时间段字符串 格式为HH:mm;HH:mm-HH:mm;HH:mm-HH:mm 3.判断空闲时段中是否是有几个是连续一直到下班的时间 如果是 则返回这个时间
时间: 2024-02-23 13:58:32 浏览: 141
好的,您的问题已经收到。针对您的问题,我可以提供以下 JAVA 代码:
```java
import java.time.LocalTime;
import java.util.Arrays;
public class TimeChecker {
public static void main(String[] args) {
String workTime = "09:00-12:00;13:00-18:00"; // 工作时间段
String freeTime = "08:00-09:30;12:30-13:30;16:00-18:30"; // 空闲时间段
String continuousTime = getContinuousTime(workTime, freeTime); // 获取连续空闲时间段
if (continuousTime != null) {
System.out.println("连续空闲时间段:" + continuousTime);
} else {
System.out.println("没有连续空闲时间段");
}
}
/**
* 获取连续空闲时间段
* @param workTime 工作时间段字符串
* @param freeTime 空闲时间段字符串
* @return 连续空闲时间段字符串,如果不存在返回 null
*/
public static String getContinuousTime(String workTime, String freeTime) {
// 将时间段字符串转换为 LocalTime 数组
LocalTime[][] workTimeArr = parseTimeStr(workTime);
LocalTime[][] freeTimeArr = parseTimeStr(freeTime);
// 遍历空闲时间段数组
for (LocalTime[] free : freeTimeArr) {
// 判断空闲时间段是否连续
boolean isContinuous = true;
for (LocalTime[] work : workTimeArr) {
if (work[1].isBefore(free[0]) || work[0].isAfter(free[1])) {
// 工作时间段和空闲时间段无交集
continue;
}
if (free[0].isAfter(work[0]) && free[1].isBefore(work[1])) {
// 空闲时间段被包含在工作时间段中
isContinuous = false;
break;
}
if (free[0].isBefore(work[0])) {
// 空闲时间段与工作时间段的前半部分有交集
if (!free[1].isBefore(work[0])) {
isContinuous = false;
break;
}
} else {
// 空闲时间段与工作时间段的后半部分有交集
if (!free[0].isAfter(work[1])) {
isContinuous = false;
break;
}
}
}
if (isContinuous) {
return free[0].toString() + "-" + free[1].toString();
}
}
return null;
}
/**
* 将时间段字符串解析为 LocalTime 数组
* @param timeStr 时间段字符串
* @return LocalTime 数组,每个元素包含开始时间和结束时间
*/
private static LocalTime[][] parseTimeStr(String timeStr) {
String[] timeArr = timeStr.split(";");
LocalTime[][] result = new LocalTime[timeArr.length][2];
for (int i = 0; i < timeArr.length; i++) {
String[] time = timeArr[i].split("-");
result[i][0] = LocalTime.parse(time[0]);
result[i][1] = LocalTime.parse(time[1]);
}
// 对 LocalTime 数组按照开始时间进行排序
Arrays.sort(result, (a, b) -> a[0].compareTo(b[0]));
return result;
}
}
```
代码中 `getContinuousTime` 方法用于获取连续空闲时间段,接收两个参数,分别是工作时间段字符串和空闲时间段字符串。方法的返回值为连续空闲时间段字符串,如果不存在则返回 null。在 `main` 方法中,我给出了一个示例,您可以根据自己的需求修改工作时间段和空闲时间段字符串,然后运行代码进行测试。
希望能够帮到您!如果还有其他问题,请随时提出。
阅读全文