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 21:04:32 浏览: 88
JAVA时间工具类(计算法定工作日工时等)
4星 · 用户满意度95%
你可以使用 Java 的时间相关类和字符串操作来实现这个需求。以下是一个简单的实现思路:
1. 将日常工作时间段和剩余可用工作时间段字符串转换为时间段的列表,可以使用 SimpleDateFormat 类解析字符串。
2. 遍历剩余可用工作时间段列表,找到其中连续的时间段,然后判断该时间段是否能满足需要的工作时间。
3. 判断时间段是否连续可以使用 Calendar 类中的 add 方法来比较时间。需要注意的是,如果可用工作时间段包含了非工作时间,需要将其排除。
4. 最后返回 true 或 false。
以下是一个示例代码实现:
```java
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class DeviceSchedule {
public static void main(String[] args) throws Exception {
String dailyWorkTime = "08:00-09:00;13:00-15:00";
String availableTime = "08:58-09:00;13:00-14:00";
int requiredTime = 30;
List<TimeRange> dailyWorkTimeRanges = parseTimeRanges(dailyWorkTime);
List<TimeRange> availableTimeRanges = parseTimeRanges(availableTime);
boolean isAvailable = false;
for (TimeRange range : availableTimeRanges) {
if (isContinuousTimeRange(range, dailyWorkTimeRanges)) {
int availableTimeInMinutes = range.getDurationInMinutes();
if (availableTimeInMinutes >= requiredTime) {
isAvailable = true;
break;
}
}
}
System.out.println(isAvailable);
}
private static List<TimeRange> parseTimeRanges(String timeRangeStr) throws Exception {
List<TimeRange> timeRanges = new ArrayList<>();
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
String[] timeRangeArray = timeRangeStr.split(";");
for (String tr : timeRangeArray) {
String[] timeArray = tr.split("-");
Date startTime = format.parse(timeArray[0]);
Date endTime = format.parse(timeArray[1]);
TimeRange timeRange = new TimeRange(startTime, endTime);
timeRanges.add(timeRange);
}
return timeRanges;
}
private static boolean isContinuousTimeRange(TimeRange range, List<TimeRange> dailyWorkTimeRanges) {
for (TimeRange dailyRange : dailyWorkTimeRanges) {
if (dailyRange.contains(range)) {
return true;
}
}
return false;
}
static class TimeRange {
private Date startTime;
private Date endTime;
public TimeRange(Date startTime, Date endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
public boolean contains(TimeRange otherRange) {
return (this.startTime.before(otherRange.startTime) && this.endTime.after(otherRange.startTime)) ||
(this.startTime.before(otherRange.endTime) && this.endTime.after(otherRange.endTime)) ||
(this.startTime.equals(otherRange.startTime) && this.endTime.equals(otherRange.endTime));
}
public int getDurationInMinutes() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(startTime);
long startMillis = calendar.getTimeInMillis();
calendar.setTime(endTime);
long endMillis = calendar.getTimeInMillis();
long durationMillis = endMillis - startMillis;
int durationInMinutes = (int) (durationMillis / (1000 * 60));
return durationInMinutes;
}
}
}
```
需要注意的是,该实现只是一个简单的示例,实际使用中可能需要更多的健壮性判断和优化。
阅读全文