JAVA 需求背景 1.传入日常工作时间段为字符串(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm) 2.传入剩余可用工作时间段为字符串(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm) 3.传入需要的工作时间(分) 3.判断是否有可用工作时间段的时间满足需要工作时间 如果有 返回满足的时间段中最早的时间段
时间: 2024-02-06 15:04:36 浏览: 66
您好!根据您的需求背景,我可以提供以下Java代码示例来实现您的需求:
```java
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
public class WorkTimeScheduler {
public static void main(String[] args) {
String dailyWorkTime = "08:00-12:00;13:00-17:00;18:00-21:00";
String availableWorkTime = "08:00-12:00;14:00-17:00;19:00-22:00";
int requiredWorkTime = 120;
List<TimeRange> dailyTimeRanges = parseTimeRanges(dailyWorkTime);
List<TimeRange> availableTimeRanges = parseTimeRanges(availableWorkTime);
TimeRange earliestAvailableTimeRange = getEarliestAvailableTimeRange(dailyTimeRanges, availableTimeRanges, requiredWorkTime);
if (earliestAvailableTimeRange != null) {
System.out.println("The earliest available time range is: " + earliestAvailableTimeRange.toString());
} else {
System.out.println("No available time range satisfies the required work time.");
}
}
public static List<TimeRange> parseTimeRanges(String timeRangesStr) {
List<TimeRange> timeRanges = new ArrayList<>();
String[] rangeStrs = timeRangesStr.split(";");
for (String rangeStr : rangeStrs) {
String[] times = rangeStr.split("-");
LocalTime startTime = LocalTime.parse(times[0]);
LocalTime endTime = LocalTime.parse(times[1]);
timeRanges.add(new TimeRange(startTime, endTime));
}
return timeRanges;
}
public static TimeRange getEarliestAvailableTimeRange(List<TimeRange> dailyTimeRanges, List<TimeRange> availableTimeRanges, int requiredWorkTime) {
for (TimeRange availableTimeRange : availableTimeRanges) {
for (TimeRange dailyTimeRange : dailyTimeRanges) {
TimeRange intersection = dailyTimeRange.getIntersection(availableTimeRange);
if (intersection != null && intersection.getDuration() >= requiredWorkTime) {
return intersection;
}
}
}
return null;
}
}
class TimeRange {
private final LocalTime startTime;
private final LocalTime endTime;
public TimeRange(LocalTime startTime, LocalTime endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
public LocalTime getStartTime() {
return startTime;
}
public LocalTime getEndTime() {
return endTime;
}
public int getDuration() {
return (int) startTime.until(endTime, java.time.temporal.ChronoUnit.MINUTES);
}
public TimeRange getIntersection(TimeRange other) {
LocalTime latestStartTime = startTime.isAfter(other.getStartTime()) ? startTime : other.getStartTime();
LocalTime earliestEndTime = endTime.isBefore(other.getEndTime()) ? endTime : other.getEndTime();
if (latestStartTime.isBefore(earliestEndTime)) {
return new TimeRange(latestStartTime, earliestEndTime);
} else {
return null;
}
}
@Override
public String toString() {
return startTime.toString() + "-" + endTime.toString();
}
}
```
解释一下代码的实现思路:
1. `parseTimeRanges` 方法用于将时间段字符串解析成 `TimeRange` 对象列表。
2. `getEarliestAvailableTimeRange` 方法遍历每个可用时间段和每个日常工作时间段,找到它们的交集,并判断交集是否满足需要的工作时间。如果找到了满足条件的交集,就返回它;否则返回 null。
3. `TimeRange` 类表示一个时间段,包括起始时间和结束时间。它提供了计算时间段时长、计算时间段交集的方法。
您可以根据自己的需求调整代码,并进行测试。希望能对您有所帮助!
阅读全文