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;HH:mm-HH:mm) 3.传入某工序需要的工作时间(分) 3.判断这个设备这天的剩余连续工作时段是否满足工序的工作时间需要 返回true或false,并且返回满足的最早工作时段的开始时间HH:mm 注意 设备剩余连续工作时段可以包含非工作时间 如工作时间段为 "08:00-12:00;13:00-17:00" 空闲时间段为"11:58-12:00;13:00-13:02" 则此空闲时段也算做是连续的工作时段
时间: 2023-08-14 21:07:25 浏览: 161
好的,我明白了你的问题。你可以使用以下的 Java 代码来实现:
```java
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
public class DeviceWorkSchedule {
private List<LocalTime> workingPeriods;
private List<LocalTime> freePeriods;
public DeviceWorkSchedule(String workingPeriodsStr, String freePeriodsStr) {
this.workingPeriods = parsePeriods(workingPeriodsStr);
this.freePeriods = parsePeriods(freePeriodsStr);
}
private List<LocalTime> parsePeriods(String periodsStr) {
List<LocalTime> periods = new ArrayList<>();
String[] periodStrs = periodsStr.split(";");
for (String periodStr : periodStrs) {
String[] startEnd = periodStr.split("-");
LocalTime start = LocalTime.parse(startEnd[0]);
LocalTime end = LocalTime.parse(startEnd[1]);
periods.add(start);
periods.add(end);
}
return periods;
}
public boolean canProcess(int processTime) {
List<LocalTime> availablePeriods = getAvailablePeriods();
for (LocalTime start : availablePeriods) {
LocalTime end = start.plusMinutes(processTime);
if (availablePeriods.contains(end)) {
return true;
}
}
return false;
}
public LocalTime getEarliestStartTime(int processTime) {
List<LocalTime> availablePeriods = getAvailablePeriods();
for (LocalTime start : availablePeriods) {
LocalTime end = start.plusMinutes(processTime);
if (availablePeriods.contains(end)) {
return start;
}
}
return null;
}
private List<LocalTime> getAvailablePeriods() {
List<LocalTime> availablePeriods = new ArrayList<>(workingPeriods);
for (int i = 0; i < freePeriods.size(); i += 2) {
LocalTime freeStart = freePeriods.get(i);
LocalTime freeEnd = freePeriods.get(i + 1);
for (int j = 0; j < availablePeriods.size(); j += 2) {
LocalTime workStart = availablePeriods.get(j);
LocalTime workEnd = availablePeriods.get(j + 1);
if (freeEnd.isBefore(workStart) || freeStart.isAfter(workEnd)) {
continue;
}
if (freeStart.isBefore(workStart)) {
availablePeriods.set(j, freeEnd);
} else {
availablePeriods.set(j + 1, freeStart);
}
}
}
return availablePeriods;
}
public static void main(String[] args) {
String workingPeriodsStr = "08:00-12:00;13:00-17:00";
String freePeriodsStr = "11:58-12:00;13:00-13:02";
int processTime = 30;
DeviceWorkSchedule schedule = new DeviceWorkSchedule(workingPeriodsStr, freePeriodsStr);
boolean canProcess = schedule.canProcess(processTime);
System.out.println("Can process: " + canProcess);
if (canProcess) {
LocalTime earliestStartTime = schedule.getEarliestStartTime(processTime);
System.out.println("Earliest start time: " + earliestStartTime);
}
}
}
```
你可以将传入设备的日常工作时间段和传入这个设备工作时间段内还未工作的空闲时间段作为字符串传入 DeviceWorkSchedule 的构造函数中。然后,你就可以根据需要进行调用 canProcess 和 getEarliestStartTime 方法,以确定设备这天的剩余连续工作时段是否满足工序的工作时间需要,并且返回满足的最早工作时段的开始时间HH:mm。
阅读全文