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)
时间: 2024-02-05 10:14:11 浏览: 122
可以按照以下步骤实现:
1. 首先,将工作时段字符串按照分号分割成一个个时间段。
2. 然后,将每个时间段再按照减号分割成起始时间和结束时间。
3. 接下来,将设备工作开始日期时间和结束日期时间转换成 Calendar 对象。
4. 然后,使用 Calendar 对象获取开始日期和结束日期之间的天数。
5. 最后,对于每一天,计算出它对应的工作起止时间段,并将结果保存到一个 List 中。
下面是 Java 代码实现:
```
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class DeviceWorkingTime {
public static List<String> calculateWorkingTime(String workingTimeStr, Date startTime, Date endTime) {
List<String> workingTimeList = new ArrayList<>();
String[] timeSegments = workingTimeStr.split(";");
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Calendar calendar = Calendar.getInstance();
calendar.setTime(startTime);
int days = (int) ((endTime.getTime() - startTime.getTime()) / (1000 * 60 * 60 * 24)) + 1;
for (int i = 0; i < days; i++) {
calendar.add(Calendar.DATE, i == 0 ? 0 : 1);
String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
for (String timeSegment : timeSegments) {
String[] times = timeSegment.split("-");
try {
Date start = sdf.parse(times[0]);
Date end = sdf.parse(times[1]);
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(start);
startCalendar.set(Calendar.DATE, calendar.get(Calendar.DATE));
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(end);
endCalendar.set(Calendar.DATE, calendar.get(Calendar.DATE));
if (startCalendar.getTime().before(endCalendar.getTime())) {
workingTimeList.add(dayStr + " " + sdf.format(startCalendar.getTime()) + "-" + sdf.format(endCalendar.getTime()));
} else {
// 处理跨天的情况
endCalendar.add(Calendar.DATE, 1);
workingTimeList.add(dayStr + " " + sdf.format(startCalendar.getTime()) + "-" + sdf.format(endCalendar.getTime()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return workingTimeList;
}
public static void main(String[] args) throws Exception {
String workingTimeStr = "08:00-12:00;13:00-17:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startTime = sdf.parse("2021-01-01 08:00:00");
Date endTime = sdf.parse("2021-01-03 17:00:00");
List<String> workingTimeList = calculateWorkingTime(workingTimeStr, startTime, endTime);
System.out.println(workingTimeList);
}
}
```
上述代码中,calculateWorkingTime 方法接收工作时段字符串、设备工作开始日期时间和设备工作结束日期时间作为参数,返回一个 List,其中包含了每天的工作起止时间段。注意,在处理时间段时,需要考虑跨天的情况。
阅读全文