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 10:12:24 浏览: 51
练习使用Java基本数据类型。使用Java的String类操作字符串和子串
4星 · 用户满意度95%
以下是Java代码实现:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DeviceWorkingTime {
public static void main(String[] args) throws ParseException {
String workTimeStr = "09:00-12:00;13:00-18:00"; // 设备工作时段字符串
Date workStartTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-10-01 09:00:00"); // 设备工作开始日期时间
Date workEndTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-10-05 18:00:00"); // 设备工作结束日期时间
Date specifiedDay = new SimpleDateFormat("yyyy-MM-dd").parse("2021-10-03"); // 指定天
int minutes = calculateWorkingMinutes(workTimeStr, workStartTime, workEndTime, specifiedDay);
System.out.println("设备在指定天工作了 " + minutes + " 分钟");
}
/**
* 计算指定天设备工作的分钟数
*
* @param workTimeStr 设备工作时段字符串,格式为HH:mm-HH:mm;HH:mm-HH:mm;...
* @param workStartTime 设备工作开始日期时间
* @param workEndTime 设备工作结束日期时间
* @param specifiedDay 指定天
* @return 指定天设备工作的分钟数
* @throws ParseException 解析日期字符串异常
*/
private static int calculateWorkingMinutes(String workTimeStr, Date workStartTime, Date workEndTime, Date specifiedDay) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
long specifiedDayStartTime = sdf.parse(sdf.format(specifiedDay) + " 00:00").getTime(); // 指定天起始时间
long specifiedDayEndTime = specifiedDayStartTime + 24L * 60 * 60 * 1000 - 1; // 指定天结束时间
String[] workTimeArr = workTimeStr.split(";");
long totalWorkingMinutes = 0;
for (String workTime : workTimeArr) {
String[] timeRange = workTime.split("-");
Date startTime = sdf.parse(timeRange[0]);
Date endTime = sdf.parse(timeRange[1]);
long workStartTimeMs = specifiedDayStartTime + startTime.getTime();
long workEndTimeMs = specifiedDayStartTime + endTime.getTime();
if (workStartTimeMs < workStartTime.getTime()) {
workStartTimeMs = workStartTime.getTime();
}
if (workEndTimeMs > workEndTime.getTime()) {
workEndTimeMs = workEndTime.getTime();
}
if (workStartTimeMs < workEndTimeMs) {
totalWorkingMinutes += (workEndTimeMs - workStartTimeMs) / 1000L / 60;
}
}
return (int) totalWorkingMinutes;
}
}
```
首先,我们使用`SimpleDateFormat`类解析日期字符串,得到设备工作开始、结束日期时间和指定天的日期对象。
接着,我们需要将指定天转换为毫秒数表示的起始时间和结束时间,方便后续计算。
然后,我们按照设备工作时段字符串的格式解析出每个工作时间段的起始时间和结束时间,并根据指定天的起始时间和结束时间、设备工作开始时间和结束时间进行比较,得到该时间段内设备实际工作的时间。最后,将所有时间段的工作时间累加起来即可得到指定天设备工作的分钟数。注意要将累加结果转换为整数类型返回。
以上就是计算设备工作时间的Java代码实现。
阅读全文