JAVA 1.传入设备工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入设备工作开始日期时间(Date类型yyyy-MM-dd hh:mm:ss) 3.传入设备工作结束日期时间(Date类型yyyy-MM-dd hh:mm:ss) 4.传入一个指定天(Date类型yyyy-MM-dd),该天已知在工作开始和结束日期之间 5.计算第四步这一天设备工作了多少分钟 单位(分钟)
时间: 2024-02-05 08:12:22 浏览: 68
以下是 Java 代码实现:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DeviceWorkingMinutesCalculator {
private String workingHoursStr;
private Date startTime;
private Date endTime;
public DeviceWorkingMinutesCalculator(String workingHoursStr, Date startTime, Date endTime) {
this.workingHoursStr = workingHoursStr;
this.startTime = startTime;
this.endTime = endTime;
}
public int calculateWorkingMinutes(Date date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
int totalWorkingMinutes = 0;
String[] workingHours = workingHoursStr.split(";");
for (String hour : workingHours) {
String[] startEndHour = hour.split("-");
Date startHour = sdf.parse(startEndHour[0]);
Date endHour = sdf.parse(startEndHour[1]);
Date startDateTime = new Date(date.getTime());
startDateTime.setHours(startHour.getHours());
startDateTime.setMinutes(startHour.getMinutes());
startDateTime.setSeconds(0);
Date endDateTime = new Date(date.getTime());
endDateTime.setHours(endHour.getHours());
endDateTime.setMinutes(endHour.getMinutes());
endDateTime.setSeconds(0);
if (startDateTime.before(startTime)) {
startDateTime = new Date(startTime.getTime());
}
if (endDateTime.after(endTime)) {
endDateTime = new Date(endTime.getTime());
}
if (startDateTime.before(endDateTime)) {
totalWorkingMinutes += (int) ((endDateTime.getTime() - startDateTime.getTime()) / (1000 * 60));
}
}
return totalWorkingMinutes;
}
public static void main(String[] args) throws ParseException {
String workingHoursStr = "08:00-12:00;13:00-17:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startTime = sdf.parse("2022-02-01 08:00:00");
Date endTime = sdf.parse("2022-02-28 17:00:00");
Date date = sdf.parse("2022-02-10 09:30:00");
DeviceWorkingMinutesCalculator calculator = new DeviceWorkingMinutesCalculator(workingHoursStr, startTime, endTime);
int workingMinutes = calculator.calculateWorkingMinutes(date);
System.out.println(workingMinutes);
}
}
```
解释:
1. `DeviceWorkingMinutesCalculator` 类用于计算设备在指定日期内的工作时间。
2. `workingHoursStr` 是一个字符串,用于表示设备的工作时间段,每个时间段之间用分号分隔,时间段内的开始和结束时间用减号分隔。例如:`"08:00-12:00;13:00-17:00"` 表示设备在上午 8 点到中午 12 点和下午 1 点到下午 5 点工作。
3. `startTime` 和 `endTime` 分别表示设备的工作开始和结束日期时间。
4. `calculateWorkingMinutes` 方法用于计算指定日期 `date` 在设备工作时间内的工作分钟数。
5. 我们使用 `SimpleDateFormat` 类将时间字符串解析为 `Date` 对象,并使用 `setHours` 和 `setMinutes` 方法设置日期对象的小时和分钟。然后,我们检查设置的日期对象是否在设备的工作时间段内,如果是,则计算该时间段内的工作时间,并将其加入到总工作时间中。
6. 在 `main` 方法中,我们初始化 `DeviceWorkingMinutesCalculator` 对象,并计算指定日期内的工作分钟数。
阅读全文