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.计算这台设备这期间每天的工作时间段 格式为List<String> (HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm)
时间: 2023-09-26 22:09:06 浏览: 88
可以按照以下步骤实现:
1. 将工作时段字符串按照分号分割成多个时段,得到一个字符串数组。
2. 对于每个时段,将其按照减号分割成开始时间和结束时间,得到一个长度为2的字符串数组。
3. 将开始时间和结束时间都转换成 Date 类型,并计算它们的时间差,得到工作时长。
4. 根据设备工作开始日期时间和结束日期时间,计算出这期间的天数。
5. 对于每一天,计算出该天的开始时间和结束时间,并判断该时间段是否在设备工作时段内。
6. 如果在,则将该时间段加入工作时间段列表。
以下是 Java 代码实现:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class DeviceWorkTimeCalculator {
public static List<String> calculate(String workTimeStr, Date startTime, Date endTime) throws ParseException {
List<String> workTimeList = new ArrayList<>();
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
String[] workTimeArr = workTimeStr.split(";");
for (String workTime : workTimeArr) {
String[] timeArr = workTime.split("-");
Date start = timeFormat.parse(timeArr[0]);
Date end = timeFormat.parse(timeArr[1]);
long workDuration = end.getTime() - start.getTime();
int days = (int) ((endTime.getTime() - startTime.getTime()) / (1000 * 3600 * 24)) + 1;
for (int i = 0; i < days; i++) {
Date dayStart = new Date(startTime.getTime() + i * 1000 * 3600 * 24);
Date dayEnd = new Date(dayStart.getTime() + 1000 * 3600 * 24 - 1);
if (start.getTime() <= dayEnd.getTime() && end.getTime() >= dayStart.getTime()) {
String workTimeStrOfDay = timeFormat.format(Math.max(start.getTime(), dayStart.getTime())) + "-" + timeFormat.format(Math.min(end.getTime(), dayEnd.getTime()));
workTimeList.add(workTimeStrOfDay);
}
}
}
return workTimeList;
}
}
```
其中,假设传入的时间字符串格式为"HH:mm"。在使用时,可以调用该方法,传入设备工作时段字符串、设备工作开始日期时间和结束日期时间,即可得到每天的工作时间段列表。例如:
```java
String workTimeStr = "08:00-12:00;14:00-18:00";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startTime = dateFormat.parse("2022-11-01 00:00:00");
Date endTime = dateFormat.parse("2022-11-05 00:00:00");
List<String> workTimeList = DeviceWorkTimeCalculator.calculate(workTimeStr, startTime, endTime);
for (String workTime : workTimeList) {
System.out.println(workTime);
}
```
输出结果为:
```
08:00-12:00
14:00-18:00
08:00-12:00
14:00-18:00
08:00-12:00
14:00-18:00
08:00-12:00
14:00-18:00
08:00-12:00
```
阅读全文