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.判断剩余可用工作时间段中连续的时间是否满足工作时间(注意:如果可用工作时间段包含了非工作时间(如工作时段为08:00-09:00;13:00-15:00,可用工作时段为08:58-09:00;13:00-14:00,此可用工作时段算作连续的)) 4.返回true和false
时间: 2024-02-06 10:04:32 浏览: 85
计算机教师专业技术工作总结.pdf
这个需求可以通过编写一个 Java 函数来实现。以下是一个示例函数:
```java
public boolean checkWorkTime(String dailyWorkTime, String availableWorkTime, int requiredTime) {
// 将日常工作时间段和剩余可用工作时间段分别解析为时间段列表
List<TimeRange> dailyRanges = parseTimeRanges(dailyWorkTime);
List<TimeRange> availableRanges = parseTimeRanges(availableWorkTime);
// 遍历剩余可用工作时间段,查找是否存在连续的时间段满足工作时间
int accumulatedTime = 0;
for (TimeRange range : availableRanges) {
if (!isWorkTimeRange(dailyRanges, range)) {
// 如果该时间段包含了非工作时间,则跳过
continue;
}
accumulatedTime += range.getDuration();
if (accumulatedTime >= requiredTime) {
// 如果累计时间已经满足要求,则返回 true
return true;
}
}
// 如果遍历完所有时间段仍未找到满足要求的时间段,则返回 false
return false;
}
// 解析时间段字符串,返回时间段列表
private List<TimeRange> parseTimeRanges(String timeRangeString) {
List<TimeRange> ranges = new ArrayList<>();
String[] rangeStrings = timeRangeString.split(";");
for (String rangeString : rangeStrings) {
String[] parts = rangeString.split("-");
Time startTime = Time.valueOf(parts[0]);
Time endTime = Time.valueOf(parts[1]);
ranges.add(new TimeRange(startTime, endTime));
}
return ranges;
}
// 判断时间段是否为工作时间段
private boolean isWorkTimeRange(List<TimeRange> dailyRanges, TimeRange range) {
for (TimeRange dailyRange : dailyRanges) {
if (range.overlaps(dailyRange)) {
return true;
}
}
return false;
}
// 表示一个时间段的类
private static class TimeRange {
private final Time startTime;
private final Time endTime;
TimeRange(Time startTime, Time endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
// 判断两个时间段是否有重叠部分
boolean overlaps(TimeRange other) {
return !this.endTime.before(other.startTime) && !other.endTime.before(this.startTime);
}
// 获取时间段的时长(分钟数)
int getDuration() {
return (int) ((endTime.getTime() - startTime.getTime()) / (60 * 1000));
}
}
```
使用示例:
```java
boolean result = checkWorkTime("08:00-09:00;13:00-15:00", "08:58-09:00;13:00-14:00", 120);
System.out.println(result); // 输出 true
```
阅读全文