8:30-11:30 13:30-17:30为工作时间,其他时间为非工作时间,前端传来一个开始时间和一个结束时间,这段时间可以为多天,怎么找出这段时间中每一天的工作时间和非工作时间,求指点
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Period;
public class WorkTimeCalculator {
public static void calculateWorkTime(LocalDateTime startDateTime, LocalDateTime endDateTime) {
LocalDate startDate = startDateTime.toLocalDate();
LocalDate endDate = endDateTime.toLocalDate();
// 计算起始日期到结束日期之间的天数
Period period = Period.between(startDate, endDate);
int days = period.getDays() + 1;
// 计算每一天的工作时间和非工作时间
for (int i = 0; i < days; i++) {
LocalDate currentDate = startDate.plusDays(i);
boolean isWorkday = isWorkday(currentDate);
if (isWorkday) {
LocalTime workStartTime = LocalTime.of(8, 30);
LocalTime workEndTime = LocalTime.of(17, 30);
LocalDateTime workStartDateTime = LocalDateTime.of(currentDate, workStartTime);
LocalDateTime workEndDateTime = LocalDateTime.of(currentDate, workEndTime);
// 如果当前日期是起始日期,那么工作开始时间从传入的开始时间开始算起
if (currentDate.equals(startDate)) {
workStartDateTime = startDateTime;
}
// 如果当前日期是结束日期,那么工作结束时间从传入的结束时间结束
if (currentDate.equals(endDate)) {
workEndDateTime = endDateTime;
}
// 计算工作时间
Duration workDuration = Duration.between(workStartDateTime, workEndDateTime);
System.out.println(currentDate + " 的工作时间为:" + workDuration);
} else {
System.out.println(currentDate + " 是非工作日");
}
}
}
private static boolean isWorkday(LocalDate date) {
// 假设周六、周日是非工作日
return date.getDayOfWeek().getValue() < 6;
}
}