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(HH:mm-HH:mm) 例如: 工作时间段是08:00-09:00;10:00-11:00 工作起止时间是2023-05-25 08:17:00 至 2023-05-26 09:00:00 程序应该返回 08:17-09:00 10:00-11:00 08:00-09:00
时间: 2023-09-23 15:03:35 浏览: 105
以下是一个可能的 Java 实现:
```java
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class WorkSchedule {
public static void main(String[] args) throws Exception {
String workPeriods = "08:00-09:00;10:00-11:00";
Date workStartTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2023-05-25 08:17:00");
Date workEndTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2023-05-26 09:00:00");
List<String> dailyWorkPeriods = calculateDailyWorkPeriods(workPeriods, workStartTime, workEndTime);
for (String period : dailyWorkPeriods) {
System.out.println(period);
}
}
public static List<String> calculateDailyWorkPeriods(String workPeriods, Date workStartTime, Date workEndTime) throws Exception {
List<String> dailyWorkPeriods = new ArrayList<>();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(workStartTime);
while (calendar.getTime().compareTo(workEndTime) <= 0) {
String dateString = dateFormat.format(calendar.getTime());
List<String> periods = parseWorkPeriods(workPeriods);
for (String period : periods) {
String[] startEndTimes = period.split("-");
Date start = dateFormat.parse(dateString + " " + startEndTimes[0] + ":00");
Date end = dateFormat.parse(dateString + " " + startEndTimes[1] + ":00");
if (workStartTime.compareTo(end) < 0 && workEndTime.compareTo(start) > 0) {
// 如果工作时间段和当天的时间段有重叠,则取交集作为当天的工作时间段
Date dailyStart = workStartTime.compareTo(start) > 0 ? workStartTime : start;
Date dailyEnd = workEndTime.compareTo(end) < 0 ? workEndTime : end;
String dailyPeriod = new SimpleDateFormat("HH:mm").format(dailyStart) + "-"
+ new SimpleDateFormat("HH:mm").format(dailyEnd);
dailyWorkPeriods.add(dailyPeriod);
}
}
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
return dailyWorkPeriods;
}
private static List<String> parseWorkPeriods(String workPeriods) {
String[] periodStrings = workPeriods.split(";");
List<String> periods = new ArrayList<>();
for (String periodString : periodStrings) {
periods.add(periodString.trim());
}
return periods;
}
}
```
这个实现中,首先使用 `SimpleDateFormat` 类将字符串类型的工作起止时间转换成 `Date` 类型。然后使用 `parseWorkPeriods` 方法将工作时间段字符串解析成每个时间段的起止时间。接着,使用 `Calendar` 类遍历起止日期之间的每一天,并对于每一天,判断工作时间段和当天的时间段是否有重叠,如果有,则取交集作为当天的工作时间段并加入到返回列表中。最后,返回列表包含了每天的工作时间段。
阅读全文