用java实现工作时间计算,法定节假日、周末除外

在 Java 中实现工作时间计算,需要考虑法定节假日和周末的排除。通常可以通过以下步骤来实现:

  1. 定义工作时间规则:确定一周内的工作日和每天的工作时间段。假设工作日为周一至周五,工作时间为每天上午9点到下午5点。

  2. 排除法定节假日:创建一个节假日列表或者使用节假日的 API(如公共节假日接口),判断特定日期是否是法定节假日。

  3. 排除周末:检查特定日期是否是周六或周日,如果是则排除。

  4. 计算工作时间:对于给定的起始时间和结束时间,计算实际的工作时间。可以考虑使用 Java 的日期时间类(如 LocalDateTimeLocalDate)以及时间差计算工具(如 Duration)来实现。

  5. 示例代码:下面是一个简单的示例代码,演示如何计算工作时间:

java
import java.time.*; import java.time.temporal.ChronoUnit; public class WorkingTimeCalculator { // 定义工作时间段 private static final LocalTime WORK_START_TIME = LocalTime.of(9, 0); // 上午9点 private static final LocalTime WORK_END_TIME = LocalTime.of(17, 0); // 下午5点 // 判断是否是工作日(周一至周五) private static boolean isWorkingDay(LocalDate date) { DayOfWeek dayOfWeek = date.getDayOfWeek(); return dayOfWeek != DayOfWeek.SATURDAY && dayOfWeek != DayOfWeek.SUNDAY; } // 计算工作时间 public static Duration calculateWorkingTime(LocalDateTime startDateTime, LocalDateTime endDateTime) { Duration workingTime = Duration.ZERO; LocalDateTime currentDateTime = startDateTime; while (currentDateTime.isBefore(endDateTime)) { LocalDate currentDate = currentDateTime.toLocalDate(); LocalTime currentTime = currentDateTime.toLocalTime(); if (isWorkingDay(currentDate) && !isHoliday(currentDate)) { if (currentTime.isBefore(WORK_START_TIME)) { currentTime = WORK_START_TIME; } if (currentTime.isAfter(WORK_END_TIME)) { currentTime = WORK_END_TIME; } LocalDateTime endOfWorkDay = LocalDateTime.of(currentDate, WORK_END_TIME); if (currentDateTime.plusHours(1).isAfter(endOfWorkDay)) { currentTime = WORK_END_TIME; } LocalDateTime currentDateTime1 = currentDateTime.plusDays(1); เ DateTime Test.java calculate Working