JAVA 1.传入设备的日常工作时间段(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm) 1.传入某工序需要的工作时间(分) 2.传入这个设备空闲时间段如(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm) 3.判断这个设备空闲时间段时间是否满足工序的工作时间需要 返回true或false 注意:设备满足工序的时间段必须是除休息时间段外的连续工作时间段
时间: 2023-08-06 20:09:35 浏览: 154
JAVA实现按时间段查询数据操作
好的,根据您的问题描述,可以采用以下的Java代码实现:
```java
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
public class DeviceSchedule {
// 设备的日常工作时间段列表
private List<TimeRange> workTimeRanges;
public DeviceSchedule(String workTimeRangeStr) {
this.workTimeRanges = parseTimeRanges(workTimeRangeStr);
}
// 解析时间段字符串,返回时间段列表
private List<TimeRange> parseTimeRanges(String timeRangesStr) {
List<TimeRange> timeRanges = new ArrayList<>();
String[] timeRangeStrs = timeRangesStr.split(";");
for (String timeRangeStr : timeRangeStrs) {
String[] startEndTimes = timeRangeStr.split("-");
LocalTime startTime = LocalTime.parse(startEndTimes[0]);
LocalTime endTime = LocalTime.parse(startEndTimes[1]);
timeRanges.add(new TimeRange(startTime, endTime));
}
return timeRanges;
}
// 判断设备在某天的空闲时间段中是否有满足工序时间的连续工作时间段
public boolean hasFreeTime(String freeTimeRangeStr, int workMinutes) {
// 解析空闲时间段字符串,得到空闲时间段列表
List<TimeRange> freeTimeRanges = parseTimeRanges(freeTimeRangeStr);
// 找出设备在空闲时间段内的可用时间段列表
List<TimeRange> availableTimeRanges = new ArrayList<>();
for (TimeRange workTimeRange : workTimeRanges) {
for (TimeRange freeTimeRange : freeTimeRanges) {
TimeRange availableTimeRange = workTimeRange.intersect(freeTimeRange);
if (availableTimeRange != null) {
availableTimeRanges.add(availableTimeRange);
}
}
}
// 遍历可用时间段列表,查找满足工序时间的连续工作时间段
for (TimeRange availableTimeRange : availableTimeRanges) {
LocalTime startTime = availableTimeRange.getStartTime();
LocalTime endTime = startTime.plusMinutes(workMinutes);
if (endTime.isBefore(availableTimeRange.getEndTime())) {
// 找到了满足条件的连续工作时间段
return true;
}
}
// 没有找到满足条件的连续工作时间段
return false;
}
// 时间段类
private static class TimeRange {
private LocalTime startTime;
private 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 TimeRange intersect(TimeRange other) {
LocalTime newStartTime = this.startTime.isBefore(other.endTime) ? other.endTime : this.startTime;
LocalTime newEndTime = this.endTime.isAfter(other.startTime) ? other.startTime : this.endTime;
if (newStartTime.isBefore(newEndTime)) {
return new TimeRange(newStartTime, newEndTime);
} else {
return null;
}
}
}
}
```
以上的代码中,`DeviceSchedule` 类表示某个设备的日程安排,它包含了这个设备的日常工作时间段列表,在构造函数中从字符串中解析出来;`hasFreeTime` 方法用于判断设备在某天的空闲时间段中是否有满足工序时间的连续工作时间段,它首先解析空闲时间段字符串,得到空闲时间段列表,然后找出设备在空闲时间段内的可用时间段列表,遍历可用时间段列表,查找满足工序时间的连续工作时间段。
注意,以上代码中的时间段类 `TimeRange` 实现了计算两个时间段的交集的方法,这个方法在找出设备在空闲时间段内的可用时间段列表时用到了。
您可以按照以下的方式使用 `DeviceSchedule` 类:
```java
public static void main(String[] args) {
// 创建一个设备的日程安排对象
DeviceSchedule deviceSchedule = new DeviceSchedule("08:00-12:00;13:00-17:00");
// 判断设备在某天的空闲时间段中是否有满足工序时间的连续工作时间段
String freeTimeRangeStr = "08:00-08:30;10:00-12:00;14:00-16:00";
int workMinutes = 15;
boolean hasFreeTime = deviceSchedule.hasFreeTime(freeTimeRangeStr, workMinutes);
System.out.println(hasFreeTime); // 输出 true
}
```
以上代码中,首先创建了一个设备的日程安排对象 `deviceSchedule`,它的日常工作时间段为 08:00-12:00 和 13:00-17:00。然后调用 `hasFreeTime` 方法,传入设备的空闲时间段字符串和工序需要的工作时间,判断设备在这些空闲时间段内是否有满足工序时间的连续工作时间段,并将结果输出。
阅读全文