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.计算出这台设备这期间每天的工作起止时间 (HH:mm-HH:mm)
时间: 2023-09-26 15:09:07 浏览: 162
可以按照以下步骤实现:
1. 解析工作时段字符串,将每个时段的起止时间存储到列表中。
2. 计算出工作开始日期和结束日期之间的天数,包括开始日期和结束日期。
3. 对于每一天,根据工作时段列表中的时间段计算出当天的工作起止时间。
4. 将每天的工作起止时间存储到列表中。
下面是一个示例代码:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class WorkTimeCalculator {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
public static List<String> calculateWorkTime(String workTimeStr, Date startTime, Date endTime) throws ParseException {
// 解析工作时段字符串
String[] workTimeArray = workTimeStr.split(";");
List<Date[]> workTimeList = new ArrayList<>();
for (String workTime : workTimeArray) {
String[] timeRange = workTime.split("-");
Date startTimeOfDay = timeFormat.parse(timeRange[0]);
Date endTimeOfDay = timeFormat.parse(timeRange[1]);
workTimeList.add(new Date[]{startTimeOfDay, endTimeOfDay});
}
List<String> workTimeResult = new ArrayList<>();
// 计算工作天数
long timeDiff = endTime.getTime() - startTime.getTime();
int days = (int) (timeDiff / (1000 * 60 * 60 * 24)) + 1;
// 对于每一天,计算出工作起止时间
for (int i = 0; i < days; i++) {
Date currentDate = new Date(startTime.getTime() + i * 24 * 60 * 60 * 1000);
Date[] workTimeOfDay = getWorkTimeOfDay(currentDate, workTimeList);
if (workTimeOfDay != null) {
String startTimeStr = timeFormat.format(workTimeOfDay[0]);
String endTimeStr = timeFormat.format(workTimeOfDay[1]);
workTimeResult.add(startTimeStr + "-" + endTimeStr);
}
}
return workTimeResult;
}
private static Date[] getWorkTimeOfDay(Date date, List<Date[]> workTimeList) {
for (Date[] workTime : workTimeList) {
Date startTimeOfDay = setTimeOfDay(date, workTime[0]);
Date endTimeOfDay = setTimeOfDay(date, workTime[1]);
if (date.getTime() >= startTimeOfDay.getTime() && date.getTime() <= endTimeOfDay.getTime()) {
return new Date[]{startTimeOfDay, endTimeOfDay};
}
}
return null;
}
private static Date setTimeOfDay(Date date, Date timeOfDay) {
Date result = new Date(date.getTime());
result.setHours(timeOfDay.getHours());
result.setMinutes(timeOfDay.getMinutes());
result.setSeconds(0);
return result;
}
public static void main(String[] args) throws ParseException {
String workTimeStr = "08:00-12:00;13:00-17:00";
Date startTime = dateFormat.parse("2021-07-01 09:00:00");
Date endTime = dateFormat.parse("2021-07-05 15:00:00");
List<String> workTimeResult = calculateWorkTime(workTimeStr, startTime, endTime);
for (String workTime : workTimeResult) {
System.out.println(workTime);
}
}
}
```
在上面的示例代码中,我们将工作时段字符串按照分号分隔,解析出每个时段的起止时间,并存储到列表中。然后,我们计算出工作开始日期和结束日期之间的天数,对于每一天,调用 `getWorkTimeOfDay` 方法计算出当天的工作起止时间,并将其存储到列表中。`getWorkTimeOfDay` 方法将日期的时间部分设置为当天的工作起止时间,然后与工作时段列表中的时间段进行比较,如果日期在工作时间范围内,则返回起止时间。`setTimeOfDay` 方法用于将日期的时间部分设置为指定的时间。最后,我们打印出每天的工作起止时间。
阅读全文