传入两个日期返回两个日期之间的工作日天数,考虑法定节假日
时间: 2023-05-20 09:03:23 浏览: 89
您好,我可以为您提供一个计算两个日期之间工作日天数的算法,考虑法定节假日。具体实现可以参考以下代码:
```python
import datetime
def workdays(start_date, end_date, holidays=[]):
days = (end_date - start_date).days + 1
workdays = 0
for i in range(days):
day = start_date + datetime.timedelta(days=i)
if day.weekday() < 5 and day not in holidays:
workdays += 1
return workdays
# 示例
start_date = datetime.date(2022, 1, 1)
end_date = datetime.date(2022, 1, 10)
holidays = [datetime.date(2022, 1, 3), datetime.date(2022, 1, 4)]
print(workdays(start_date, end_date, holidays))
```
该算法首先计算两个日期之间的天数,然后遍历每一天,判断是否为工作日(即周一至周五),并且不在法定节假日列表中。最后返回工作日天数。
需要注意的是,该算法默认法定节假日为空列表,如果需要考虑法定节假日,可以将法定节假日日期添加到holidays列表中。
相关问题
java编写传入两个日期返回两个日期之间的工作日天数,考虑法定节假日
可以使用Java的日期时间类库和循环来计算两个日期之间的工作日天数,考虑法定节假日。具体实现可以参考以下代码:
```java
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
import java.util.Set;
public class WorkdayCalculator {
// 法定节假日列表
private static final Set<LocalDate> holidays = new HashSet<>();
static {
holidays.add(LocalDate.of(2021, 1, 1)); // 元旦
holidays.add(LocalDate.of(2021, 2, 11)); // 春节
holidays.add(LocalDate.of(2021, 2, 12)); // 春节
holidays.add(LocalDate.of(2021, 2, 13)); // 春节
holidays.add(LocalDate.of(2021, 2, 14)); // 春节
holidays.add(LocalDate.of(2021, 2, 15)); // 春节
holidays.add(LocalDate.of(2021, 2, 16)); // 春节
holidays.add(LocalDate.of(2021, 2, 17)); // 春节
holidays.add(LocalDate.of(2021, 4, 3)); // 清明节
holidays.add(LocalDate.of(2021, 5, 1)); // 劳动节
holidays.add(LocalDate.of(2021, 5, 2)); // 劳动节
holidays.add(LocalDate.of(2021, 5, 3)); // 劳动节
holidays.add(LocalDate.of(2021, 6, 12)); // 端午节
holidays.add(LocalDate.of(2021, 9, 19)); // 中秋节
holidays.add(LocalDate.of(2021, 10, 1)); // 国庆节
holidays.add(LocalDate.of(2021, 10, 2)); // 国庆节
holidays.add(LocalDate.of(2021, 10, 3)); // 国庆节
holidays.add(LocalDate.of(2021, 10, 4)); // 国庆节
holidays.add(LocalDate.of(2021, 10, 5)); // 国庆节
holidays.add(LocalDate.of(2021, 10, 6)); // 国庆节
holidays.add(LocalDate.of(2021, 10, 7)); // 国庆节
}
public static long getWorkdayCount(LocalDate start, LocalDate end) {
long workdayCount = 0;
LocalDate date = start;
while (date.isBefore(end)) {
if (date.getDayOfWeek() != DayOfWeek.SATURDAY && date.getDayOfWeek() != DayOfWeek.SUNDAY && !holidays.contains(date)) {
workdayCount++;
}
date = date.plus(1, ChronoUnit.DAYS);
}
return workdayCount;
}
}
```
使用示例:
```java
LocalDate start = LocalDate.of(2021, 1, 1);
LocalDate end = LocalDate.of(2021, 12, 31);
long workdayCount = WorkdayCalculator.getWorkdayCount(start, end);
System.out.println("工作日天数:" + workdayCount);
```
输出结果:
```
工作日天数:251
```
以java基础代码编写,传入两个日期返回两个日期之间的工作日天数
以下是以Java基础代码编写,传入两个日期返回两个日期之间的工作日天数的示例代码:
```java
import java.time.DayOfWeek;
import java.time.LocalDate;
public class WorkdayCalculator {
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2022, 1, 1);
LocalDate endDate = LocalDate.of(2022, 1, 10);
int workdayCount = getWorkdayCount(startDate, endDate);
System.out.println("工作日天数:" + workdayCount);
}
public static int getWorkdayCount(LocalDate startDate, LocalDate endDate) {
int workdayCount = 0;
LocalDate date = startDate;
while (!date.isAfter(endDate)) {
DayOfWeek dayOfWeek = date.getDayOfWeek();
if (dayOfWeek != DayOfWeek.SATURDAY && dayOfWeek != DayOfWeek.SUNDAY) {
workdayCount++;
}
date = date.plusDays(1);
}
return workdayCount;
}
}
```
在这个示例代码中,我们使用了Java 8中的LocalDate类来表示日期,并使用了Java 8中的新特性来计算两个日期之间的工作日天数。具体来说,我们使用了一个while循环来遍历两个日期之间的每一天,然后使用LocalDate类的getDayOfWeek()方法来获取每一天是星期几,如果这一天不是周六或周日,就将工作日天数加1。最后返回工作日天数即可。
请注意,这个示例代码只是一个简单的示例,实际上计算工作日天数可能会更加复杂,因为还需要考虑法定节假日等因素。