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.判断这个设备这天的剩余连续工作时段(注意:如果空闲时段包含了非工作时间,则算做连续的可用时间)是否满足工序的工作时间需要 4.返回true和false 和满足的时间段的开始时间HH:mm
时间: 2024-02-06 22:04:27 浏览: 116
JAVA 时间区间的字符串合法性验证
可以使用以下方法实现:
```java
public static boolean checkDeviceAvailability(String workingTime, String idleTime, int requiredTime) {
// 将工作时间和空闲时间字符串分割成时间段数组
String[] workingTimeArray = workingTime.split(";");
String[] idleTimeArray = idleTime.split(";");
// 将所有时间段解析成开始时间和结束时间
List<TimeRange> workingRanges = parseTimeRanges(workingTimeArray);
List<TimeRange> idleRanges = parseTimeRanges(idleTimeArray);
// 获取可用时间段
List<TimeRange> availableRanges = getAvailableRanges(workingRanges, idleRanges);
// 遍历可用时间段,查找是否有满足工作时间需要的时间段
for (TimeRange range : availableRanges) {
if (range.getDuration() >= requiredTime) {
System.out.println("可用时间段开始于:" + range.getStart().toString());
return true;
}
}
return false;
}
// 解析时间段字符串,返回时间段列表
private static List<TimeRange> parseTimeRanges(String[] timeArray) {
List<TimeRange> ranges = new ArrayList<>();
for (String time : timeArray) {
String[] parts = time.split("-");
LocalTime start = LocalTime.parse(parts[0], DateTimeFormatter.ofPattern("HH:mm"));
LocalTime end = LocalTime.parse(parts[1], DateTimeFormatter.ofPattern("HH:mm"));
ranges.add(new TimeRange(start, end));
}
return ranges;
}
// 获取可用时间段,即工作时间段中除去空闲时间段后的时间段
private static List<TimeRange> getAvailableRanges(List<TimeRange> workingRanges, List<TimeRange> idleRanges) {
List<TimeRange> availableRanges = new ArrayList<>(workingRanges);
for (TimeRange idleRange : idleRanges) {
availableRanges = TimeRange.subtract(availableRanges, idleRange);
}
return availableRanges;
}
```
其中,`TimeRange`类表示一个时间段,包含开始时间和结束时间,以及计算时间段长度的方法:
```java
public 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 int getDuration() {
return (int) Duration.between(start, end).toMinutes();
}
// 时间段相减,返回剩余的时间段
public static List<TimeRange> subtract(List<TimeRange> ranges, TimeRange range) {
List<TimeRange> result = new ArrayList<>();
for (TimeRange r : ranges) {
if (r.getStart().isAfter(range.getEnd()) || r.getEnd().isBefore(range.getStart())) {
result.add(r);
} else if (r.getStart().isBefore(range.getStart()) && r.getEnd().isAfter(range.getEnd())) {
result.add(new TimeRange(r.getStart(), range.getStart()));
result.add(new TimeRange(range.getEnd(), r.getEnd()));
} else if (r.getStart().isBefore(range.getStart())) {
result.add(new TimeRange(r.getStart(), range.getStart()));
} else if (r.getEnd().isAfter(range.getEnd())) {
result.add(new TimeRange(range.getEnd(), r.getEnd()));
}
}
return result;
}
}
```
可以使用以下代码调用上述方法:
```java
String workingTime = "08:00-12:00;13:00-17:00";
String idleTime = "09:00-10:00;14:00-15:00";
int requiredTime = 60;
boolean available = checkDeviceAvailability(workingTime, idleTime, requiredTime);
System.out.println("是否可用:" + available);
```
上述代码判断的是设备在08:00-12:00和13:00-17:00这两个时间段内工作,但是09:00-10:00和14:00-15:00这两个时间段是空闲的,工序需要60分钟的时间。如果设备有连续满足60分钟要求的可用时间段,则返回true和满足要求的时间段的开始时间。否则返回false。
阅读全文