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 16:04:27 浏览: 76
好的,您的需求很清楚,我可以帮您解决。以下是 JAVA 代码实现:
```
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class DeviceWorkTime {
public static void main(String[] args) throws ParseException {
String workTimeStr = "08:00-12:00;13:00-18:00";
String idleTimeStr = "09:00-10:00;14:00-15:00";
int processTime = 60;
List<String> idleTimeList = getTimeList(idleTimeStr);
List<String> workTimeList = getTimeList(workTimeStr);
String idleStartTime = "";
for (String workTime : workTimeList) {
String[] workTimeArr = workTime.split("-");
int workStart = getMinute(workTimeArr[0]);
int workEnd = getMinute(workTimeArr[1]);
boolean isIdle = false;
for (String idleTime : idleTimeList) {
String[] idleTimeArr = idleTime.split("-");
int idleStart = getMinute(idleTimeArr[0]);
int idleEnd = getMinute(idleTimeArr[1]);
if (workStart >= idleStart && workEnd <= idleEnd) {
isIdle = true;
break;
}
}
if (!isIdle && workEnd - workStart >= processTime) {
idleStartTime = getTimeString(workStart);
break;
}
}
if (idleStartTime.equals("")) {
System.out.println("false");
} else {
System.out.println("true");
System.out.println("Idle start time: " + idleStartTime);
}
}
/**
* 获取时间列表
* @param timeStr 时间字符串,格式为:HH:mm-HH:mm;HH:mm-HH:mm;...
* @return 时间列表
*/
public static List<String> getTimeList(String timeStr) {
List<String> timeList = new ArrayList<>();
String[] timeArr = timeStr.split(";");
for (String time : timeArr) {
timeList.add(time);
}
return timeList;
}
/**
* 获取分钟数
* @param timeStr 时间字符串,格式为:HH:mm
* @return 分钟数
*/
public static int getMinute(String timeStr) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date date = sdf.parse(timeStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
return hour * 60 + minute;
}
/**
* 获取时间字符串
* @param minute 分钟数
* @return 时间字符串,格式为:HH:mm
*/
public static String getTimeString(int minute) {
int hour = minute / 60;
minute = minute % 60;
return String.format("%02d:%02d", hour, minute);
}
}
```
您可以将设备的日常工作时间段和未工作的空闲时间段作为字符串传入 `getTimeList` 方法中,该方法会返回时间列表。然后,我们可以依次遍历工作时间段列表中的每个时间段,判断是否存在空闲时间段包含在其中,如果不包含且时间段长度大于等于某个工序需要的工作时间,则该时间段为连续剩余可工作时段。最后,如果存在连续剩余可工作时段,则返回 true 和空闲时间段的开始时间 HH:mm,否则返回 false。
阅读全文