java通过开始时间结束时间获取去掉节假日的工时
时间: 2023-07-01 10:05:38 浏览: 71
您可以使用Java中的日期时间类和Calendar类来计算两个日期之间的工作小时数,然后在计算过程中排除节假日。以下是一个示例代码:
```java
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class WorkingHoursCalculator {
/**
* 计算两个日期之间的工作小时数
*
* @param startDate 开始日期
* @param endDate 结束日期
* @param holidays 节假日列表
* @return 工作小时数
*/
public static double calculateWorkingHours(Date startDate, Date endDate, Set<Date> holidays) {
// 设置每天的工作时间(这里假设每天工作8小时)
int workHoursPerDay = 8;
// 创建Calendar对象
Calendar calendar = Calendar.getInstance();
// 设置开始日期
calendar.setTime(startDate);
// 初始化总工作小时数
double totalWorkingHours = 0;
// 循环遍历每一天
while (calendar.getTime().before(endDate)) {
// 排除周末和节假日
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek != Calendar.SATURDAY && dayOfWeek != Calendar.SUNDAY && !holidays.contains(calendar.getTime())) {
totalWorkingHours += workHoursPerDay;
}
// 增加一天
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
// 计算最后一天的工作小时数
if (calendar.getTime().equals(endDate)) {
int endHour = calendar.get(Calendar.HOUR_OF_DAY);
totalWorkingHours += endHour - 9; // 假设每天从9点开始工作
}
return totalWorkingHours;
}
public static void main(String[] args) {
// 测试
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(2021, Calendar.JANUARY, 1, 9, 0, 0); // 2021年1月1日9点
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(2021, Calendar.JANUARY, 8, 18, 0, 0); // 2021年1月8日18点
Set<Date> holidays = new HashSet<>();
holidays.add(startCalendar.getTime()); // 2021年元旦节
holidays.add(endCalendar.getTime()); // 2021年元宵节
double workingHours = calculateWorkingHours(startCalendar.getTime(), endCalendar.getTime(), holidays);
System.out.println("工作小时数:" + workingHours);
}
}
```
上面的代码假设每天工作8小时,并且每周六日和节假日不工作。在计算最后一天的工作小时数时,假设工作从9点开始。您可以根据您的实际需求进行修改。