JAVA 计算设备指定日期的使用产能 单位(分钟) 1.传入工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入两个工作起止时间(Date类型) 3.传入一个指定日期(Date类型) 4.返回设备指定日期这天使用了多少产能 单位(分钟)
时间: 2024-01-23 20:02:36 浏览: 95
关于JAVA中日期的计算问题
以下是一个可能的 Java 实现:
```java
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CapacityCalculator {
private static final DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");
public static int calculateCapacity(String workHours, Date startDate, Date endDate, Date targetDate) throws ParseException {
String[] workHourRanges = workHours.split(";");
int totalMinutes = 0;
for (String workHourRange : workHourRanges) {
String[] startEndTimes = workHourRange.split("-");
Date workStartTime = TIME_FORMAT.parse(startEndTimes[0]);
Date workEndTime = TIME_FORMAT.parse(startEndTimes[1]);
Date effectiveStartTime = startDate.after(workStartTime) ? startDate : workStartTime;
Date effectiveEndTime = endDate.before(workEndTime) ? endDate : workEndTime;
if (effectiveStartTime.before(effectiveEndTime)) {
totalMinutes += calculateMinutesInRange(effectiveStartTime, effectiveEndTime, targetDate);
}
}
return totalMinutes;
}
private static int calculateMinutesInRange(Date startTime, Date endTime, Date targetDate) {
Date startDateTime = combineDateAndTime(targetDate, startTime);
Date endDateTime = combineDateAndTime(targetDate, endTime);
return (int) ((endDateTime.getTime() - startDateTime.getTime()) / (1000 * 60));
}
private static Date combineDateAndTime(Date date, Date time) {
return new Date(date.getYear(), date.getMonth(), date.getDate(),
time.getHours(), time.getMinutes(), time.getSeconds());
}
}
```
这个实现将工作时段字符串按照分号分隔,并将每个工作时段按照冒号分隔成开始和结束时间。然后遍历每个工作时段,找到该日期和工作起止时间的重叠部分,并计算该时间段的分钟数。最后将所有时间段的分钟数相加,即为该日期的使用产能。注意一些边界情况,如工作起止时间可能跨越了多个日期,或者某个工作时段完全在指定日期之前或之后等。
阅读全文