用java实现工作时间计算,法定节假日、周末除外
在 Java 中实现工作时间计算,需要考虑法定节假日和周末的排除。通常可以通过以下步骤来实现:
定义工作时间规则:确定一周内的工作日和每天的工作时间段。假设工作日为周一至周五,工作时间为每天上午9点到下午5点。
排除法定节假日:创建一个节假日列表或者使用节假日的 API(如公共节假日接口),判断特定日期是否是法定节假日。
排除周末:检查特定日期是否是周六或周日,如果是则排除。
计算工作时间:对于给定的起始时间和结束时间,计算实际的工作时间。可以考虑使用 Java 的日期时间类(如
LocalDateTime
和LocalDate
)以及时间差计算工具(如Duration
)来实现。示例代码:下面是一个简单的示例代码,演示如何计算工作时间:
javaimport 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