帮忙写段java程序,计算开始和截止时间,计算工作时长,需要排除节假日
时间: 2024-05-20 11:11:48 浏览: 61
好的,您需要一个Java程序来计算工作时间,需要排除节假日。我可以提供一些帮助指导您完成这个任务。首先,您需要一个方式来确定哪些日期是节假日,这可以通过设置一个日期列表来实现。然后,您需要一个方法来计算开始和截止时间之间的时间差,该方法应该排除节假日。最后,您需要一个方法来将时间差转换为工作小时数。以下是一个可能的实现:
import java.time.*;
import java.util.*;
public class WorkTimeCalculator {
private List<LocalDate> holidays;
public WorkTimeCalculator(List<LocalDate> holidays) {
this.holidays = holidays;
}
public Duration calculateWorkDuration(LocalDateTime start, LocalDateTime end) {
long minutes = 0;
LocalDate date = start.toLocalDate();
while (date.isBefore(end.toLocalDate()) || date.isEqual(end.toLocalDate())) {
if (!isHoliday(date)) {
if (date.isEqual(start.toLocalDate())) {
minutes += end.toLocalTime().toSecondOfDay() / 60 - start.toLocalTime().toSecondOfDay() / 60;
} else if (date.isEqual(end.toLocalDate())) {
minutes += end.toLocalTime().toSecondOfDay() / 60;
} else {
minutes += 8 * 60;
}
}
date = date.plusDays(1);
}
return Duration.ofMinutes(minutes);
}
public double toWorkHours(Duration duration) {
return duration.toMinutes() / 60.0;
}
private boolean isHoliday(LocalDate date) {
return holidays.contains(date);
}
public static void main(String[] args) {
List<LocalDate> holidays = Arrays.asList(
LocalDate.of(2021, 10, 1),
LocalDate.of(2021, 10, 2),
LocalDate.of(2021, 10, 3)
);
WorkTimeCalculator calculator = new WorkTimeCalculator(holidays);
LocalDateTime start = LocalDateTime.of(2021, 9, 30, 18, 0);
LocalDateTime end = LocalDateTime.of(2021, 10, 4, 9, 30);
Duration duration = calculator.calculateWorkDuration(start, end);
System.out.println("Work duration: " + duration.toMinutes() + " minutes");
System.out.println("Work hours: " + calculator.toWorkHours(duration) + " hours");
}
}
注意:这个示例代码假定一天工作8个小时,您可以根据自己的需要进行修改。另外,请注意在您的实际代码中处理异常情况,例如开始时间在结束时间之后等。
阅读全文