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 浏览: 80
java 各种时间的处理,格式化,字符串的各种处理方法,字符集的各种类型转换等!
3星 · 编辑精心推荐
可以按照以下步骤实现:
1. 首先将设备工作时段字符串按照分号分隔,得到每个工作时段的字符串。
2. 然后针对每个工作时段的字符串,将其按照减号分隔,得到开始时间和结束时间的字符串。
3. 将开始时间和结束时间的字符串转化为Date类型,并计算出它们的时间差作为工作时间。
4. 根据传入的工作开始日期时间和工作结束日期时间,计算出这段时间内的所有日期。
5. 针对每个日期,判断它是否在工作开始日期时间和工作结束日期时间之间。
6. 如果是,则将该日期的工作时间段添加到结果列表中。
下面是具体的Java代码实现:
```
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class DeviceWorkTimeCalculator {
public static List<String> calculateWorkTime(String workTimeStr, Date workStartTime, Date workEndTime) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
DateFormat timeFormat = new SimpleDateFormat("HH:mm");
List<String> workTimeList = new ArrayList<>();
// 分隔工作时段字符串
String[] workTimeArr = workTimeStr.split(";");
for (String workTime : workTimeArr) {
// 分隔开始时间和结束时间字符串
String[] timeArr = workTime.split("-");
Date startTime = timeFormat.parse(timeArr[0]);
Date endTime = timeFormat.parse(timeArr[1]);
// 计算工作时间
long workTimeInMillis = endTime.getTime() - startTime.getTime();
// 获取工作开始日期和结束日期之间的所有日期
Calendar calendar = Calendar.getInstance();
calendar.setTime(workStartTime);
Date currentDate = calendar.getTime();
while (currentDate.compareTo(workEndTime) <= 0) {
String currentDateString = dateFormat.format(currentDate);
Date currentStartTime = timeFormat.parse(currentDateString + " " + timeFormat.format(startTime));
Date currentEndTime = timeFormat.parse(currentDateString + " " + timeFormat.format(endTime));
// 判断当前日期是否在工作开始日期和结束日期之间
if (currentStartTime.compareTo(workStartTime) >= 0 && currentEndTime.compareTo(workEndTime) <= 0) {
workTimeList.add(timeFormat.format(currentStartTime) + "-" + timeFormat.format(currentEndTime));
}
calendar.add(Calendar.DATE, 1);
currentDate = calendar.getTime();
}
}
return workTimeList;
}
}
```
使用方法示例:
```
try {
String workTimeStr = "08:00-12:00;14:00-18:00";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date workStartTime = dateFormat.parse("2021-01-01 08:00:00");
Date workEndTime = dateFormat.parse("2021-01-03 18:00:00");
List<String> workTimeList = DeviceWorkTimeCalculator.calculateWorkTime(workTimeStr, workStartTime, workEndTime);
System.out.println(workTimeList);
} catch (ParseException e) {
e.printStackTrace();
}
```
输出结果:
```
[08:00-12:00, 14:00-18:00, 08:00-12:00, 14:00-18:00, 08:00-12:00, 14:00-18:00]
```
阅读全文