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-11 22:07:04 浏览: 60
好的,您的需求很清晰明了,我来帮您解决这个问题。
以下是 JAVA 代码实现:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class DeviceWorkTimeChecker {
/**
* 判断设备在某一天的工作时间段是否满足某工序所需工作时间,并返回满足条件的空闲时间段
*
* @param workTimeStr 设备的日常工作时间段字符串,格式为HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm
* @param freeTimeStr 设备的未工作的空闲时间段字符串,格式为HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm
* @param workTimeInMin 某工序需要的工作时间(单位为分钟)
* @return 如果设备在某一天的工作时间段满足某工序所需工作时间,则返回true和满足条件的空闲时间段的开始时间HH:mm,否则返回false
*/
public static List<String> checkDeviceWorkTime(String workTimeStr, String freeTimeStr, int workTimeInMin) {
List<String> freeTimeList = splitTimeStr(freeTimeStr);
List<String> workTimeList = splitTimeStr(workTimeStr);
List<String> workTimeIntervals = getWorkTimeIntervals(workTimeList, freeTimeList);
for (String interval : workTimeIntervals) {
if (isIntervalLongEnough(interval, workTimeInMin)) {
List<String> result = new ArrayList<>();
result.add("true");
result.add(interval.split("-")[0]);
return result;
}
}
List<String> result = new ArrayList<>();
result.add("false");
return result;
}
/**
* 将时间段字符串分割成时间段列表
*
* @param timeStr 时间段字符串,格式为HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm
* @return 时间段列表,例如["HH:mm-HH:mm", "HH:mm-HH:mm", "HH:mm-HH:mm"]
*/
private static List<String> splitTimeStr(String timeStr) {
String[] timeArray = timeStr.split(";");
List<String> timeList = new ArrayList<>();
for (String time : timeArray) {
timeList.add(time);
}
return timeList;
}
/**
* 获取工作时间段列表(不包含空闲时间段)
*
* @param workTimeList 设备的日常工作时间段列表
* @param freeTimeList 设备的未工作的空闲时间段列表
* @return 工作时间段列表(不包含空闲时间段)
*/
private static List<String> getWorkTimeIntervals(List<String> workTimeList, List<String> freeTimeList) {
List<String> workTimeIntervals = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
try {
for (String workTime : workTimeList) {
Date workStartTime = sdf.parse(workTime.split("-")[0]);
Date workEndTime = sdf.parse(workTime.split("-")[1]);
boolean isWorkTime = true;
for (String freeTime : freeTimeList) {
Date freeStartTime = sdf.parse(freeTime.split("-")[0]);
Date freeEndTime = sdf.parse(freeTime.split("-")[1]);
if (workStartTime.compareTo(freeStartTime) >= 0 && workEndTime.compareTo(freeEndTime) <= 0) {
isWorkTime = false;
break;
}
}
if (isWorkTime) {
workTimeIntervals.add(workTime);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return workTimeIntervals;
}
/**
* 判断时间段是否超过指定长度
*
* @param timeInterval 时间段字符串,格式为HH:mm-HH:mm
* @param durationInMin 指定长度(单位为分钟)
* @return 如果时间段超过指定长度,则返回true,否则返回false
*/
private static boolean isIntervalLongEnough(String timeInterval, int durationInMin) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
try {
Date startTime = sdf.parse(timeInterval.split("-")[0]);
Date endTime = sdf.parse(timeInterval.split("-")[1]);
long durationInMs = durationInMin * 60 * 1000L;
if (endTime.getTime() - startTime.getTime() >= durationInMs) {
return true;
}
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
}
```
您可以通过以下代码来测试:
```java
public static void main(String[] args) {
String workTimeStr = "09:00-12:00;13:00-18:00";
String freeTimeStr = "10:00-11:00;15:00-16:00";
int workTimeInMin = 120;
List<String> result = DeviceWorkTimeChecker.checkDeviceWorkTime(workTimeStr, freeTimeStr, workTimeInMin);
System.out.println("是否满足工序时间:" + result.get(0));
System.out.println("空闲时间段的开始时间:" + result.get(1));
}
```
输出结果将会是:
```
是否满足工序时间:true
空闲时间段的开始时间:09:00
```
希望我的回答能够帮助您!
阅读全文