JAVA 1.传入工作时间段字符串 格式为HH:mm-HH:mm;HH:mm-HH:mm;... 2.传入空闲时间段字符串 格式为HH:mm;HH:mm-HH:mm;HH:mm-HH:mm 3.判断 是否有连续最后下班时间的连续空闲时段 如果有则返回这个空闲时段的开始时间 例如 工作时间段是08:00-10:00;13:00-15:00 空闲时间段是 09:10-10:00;13:00-15:00 那么应该返回09:10 因为 空闲时段中13:00和15:00是工作时段的最后上下班时间 10:00又是上一个下班时间 故9:10是连续空闲时段的开始时间
时间: 2024-01-08 08:04:46 浏览: 183
可以按照以下步骤实现:
1. 将工作时间段和空闲时间段字符串分别解析成时间段列表。
2. 对空闲时间段列表按起始时间排序。
3. 遍历空闲时间段列表,查找是否存在连续最后下班时间的空闲时段。
4. 如果存在,返回该空闲时段的开始时间。
下面是一个 Java 实现的示例代码:
```java
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class FreeTimeChecker {
public static LocalTime checkLastFreeTime(String workTimeStr, String freeTimeStr) {
List<TimeRange> workTimeRanges = parseTimeRanges(workTimeStr);
List<TimeRange> freeTimeRanges = parseTimeRanges(freeTimeStr);
freeTimeRanges.sort(Comparator.comparing(TimeRange::getStart));
LocalTime lastEndTime = null;
for (TimeRange freeTimeRange : freeTimeRanges) {
if (lastEndTime != null && freeTimeRange.getStart().isAfter(lastEndTime)) {
break; // 不连续了,退出循环
}
if (isFreeDuringWork(freeTimeRange, workTimeRanges)) {
lastEndTime = freeTimeRange.getEnd();
}
}
if (lastEndTime != null) {
return lastEndTime;
} else {
return null;
}
}
private static List<TimeRange> parseTimeRanges(String timeStr) {
String[] rangeStrs = timeStr.split(";");
List<TimeRange> ranges = new ArrayList<>();
for (String rangeStr : rangeStrs) {
String[] parts = rangeStr.split("-");
LocalTime start = LocalTime.parse(parts[0]);
LocalTime end = LocalTime.parse(parts[1]);
ranges.add(new TimeRange(start, end));
}
return ranges;
}
private static boolean isFreeDuringWork(TimeRange freeTimeRange, List<TimeRange> workTimeRanges) {
for (TimeRange workTimeRange : workTimeRanges) {
if (workTimeRange.contains(freeTimeRange)) {
return false;
}
}
return true;
}
private static class TimeRange {
private LocalTime start;
private LocalTime end;
public TimeRange(LocalTime start, LocalTime end) {
this.start = start;
this.end = end;
}
public LocalTime getStart() {
return start;
}
public LocalTime getEnd() {
return end;
}
public boolean contains(TimeRange other) {
return start.compareTo(other.getStart()) <= 0 && end.compareTo(other.getEnd()) >= 0;
}
}
}
```
你可以将工作时间段字符串和空闲时间段字符串作为参数传入 `checkLastFreeTime` 方法,该方法会返回连续最后下班时间的空闲时段的开始时间,如果不存在则返回 `null`。例如:
```java
String workTimeStr = "08:00-10:00;13:00-15:00";
String freeTimeStr = "09:10-10:00;13:00-15:00";
LocalTime startTime = FreeTimeChecker.checkLastFreeTime(workTimeStr, freeTimeStr);
if (startTime != null) {
System.out.println("连续最后下班时间的空闲时段的开始时间为:" + startTime);
} else {
System.out.println("不存在连续最后下班时间的空闲时段。");
}
```
阅读全文