JAVA 计算设备每天的使用产能 单位(分钟) 1.传入工作时段字符串,格式为(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入两个工作起止时间(Date类型) 3.返回设备每天使用了多少产能
时间: 2024-02-03 16:14:47 浏览: 29
以下是一个 Java 实现的代码示例,可以计算设备每天的使用产能:
```java
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DeviceCapacityCalculator {
/**
* 计算设备每天使用的产能(单位:分钟)
* @param workPeriodStr 工作时段字符串,格式为(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm)
* @param startTime 工作起始时间
* @param endTime 工作结束时间
* @return 设备每天使用的产能(单位:分钟)
*/
public static int calculateDeviceCapacity(String workPeriodStr, Date startTime, Date endTime) {
// 将工作时段字符串转换为工作时段数组
String[] workPeriods = workPeriodStr.split(";");
int capacity = 0;
// 遍历每个工作时段,计算产能
for (String workPeriod : workPeriods) {
String[] startEndTimes = workPeriod.split("-");
Date workStartTime = parseTime(startEndTimes[0]);
Date workEndTime = parseTime(startEndTimes[1]);
// 计算重叠部分的产能
int overlapCapacity = calculateOverlapCapacity(startTime, endTime, workStartTime, workEndTime);
capacity += overlapCapacity;
}
return capacity;
}
/**
* 计算两个时间段重叠部分的产能
* @param startTime1 时间段1的起始时间
* @param endTime1 时间段1的结束时间
* @param startTime2 时间段2的起始时间
* @param endTime2 时间段2的结束时间
* @return 两个时间段重叠部分的产能(单位:分钟)
*/
private static int calculateOverlapCapacity(Date startTime1, Date endTime1, Date startTime2, Date endTime2) {
// 计算重叠部分的起始时间和结束时间
Date overlapStartTime = startTime1.before(startTime2) ? startTime2 : startTime1;
Date overlapEndTime = endTime1.before(endTime2) ? endTime1 : endTime2;
// 计算重叠部分的时间长度(单位:毫秒)
long overlapTime = overlapEndTime.getTime() - overlapStartTime.getTime();
if (overlapTime < 0) {
// 没有重叠部分
return 0;
} else {
// 将时间长度转换为分钟
return (int) overlapTime / (1000 * 60);
}
}
/**
* 将时间字符串解析为 Date 对象
* @param timeStr 时间字符串,格式为 HH:mm
* @return Date 对象
*/
private static Date parseTime(String timeStr) {
DateFormat dateFormat = new SimpleDateFormat("HH:mm");
try {
Date time = dateFormat.parse(timeStr);
// 使用当前日期作为日期部分,以便计算时间差
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.set(Calendar.YEAR, 2021);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid time format: " + timeStr);
}
}
public static void main(String[] args) {
String workPeriodStr = "08:00-12:00;13:00-17:00";
Date startTime = parseTime("09:00");
Date endTime = parseTime("16:00");
int capacity = calculateDeviceCapacity(workPeriodStr, startTime, endTime);
System.out.println("Device capacity: " + capacity + " minutes");
}
}
```
代码中使用了 `SimpleDateFormat` 类来解析时间字符串,并使用 `Calendar` 类将时间转换为 `Date` 对象,以便计算时间差。`calculateDeviceCapacity` 方法接收工作时段字符串、起始时间和结束时间三个参数,然后遍历每个工作时段,计算重叠部分的产能。`calculateOverlapCapacity` 方法计算两个时间段重叠部分的产能,最后将重叠部分的产能累加起来即可得到设备每天的使用产能。