Python计算一段时间的工作日(除周末)

文章介绍了如何使用Python中的pandas库中的bdate_range函数来计算两个日期之间的工作日,强调了freq参数在指定工作日计数中的重要性。给出了三个示例代码片段,展示了不同格式日期输入和freq参数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 问题

计算两个日期之间有几个工作日(除周末)、有几天(不除周末)。

2 方法

用python里pandas的函数实现。

start_day: 开始日期20220101

end_day:结束日期

freq:频率,bdate_range函数不带该参数时默认是'b',即工作日。计算工作日时,这个freq固定为B或b或者不带这个参数可以

代码清单 1

def weekday_1():
   import pandas as pd
   e = pd.bdate_range('20220319', '20220326',freq='b')
   #bdate_range 6
   #date_range 8
   print (e)
   minutes = len(e)  
   print(minutes)
weekday_1()
def weekday_2():
   import pandas as pd
   e = pd.bdate_range('19/3/2022', '26/03/2022',freq='B')
   #bdate_range 6
   #date_range 8
   print (e)
   minutes = len(e)  
   print(minutes)
weekday_2()
def weekday_3():
   import pandas as pd
   e = pd.bdate_range('2022-03-19', '2022-03-26')
   #bdate_range 6
   #date_range 8
   print (e)
   minutes = len(e)  
   print(minutes)
weekday_3()

3 结语

date_range 默认的freq是'd'就是日期的意思,如果不带参数计算出来就是所有的天数,所有如果要用date_range计算工作日,必须要带freq='b'的参数,其他开始日期和结束日期的格式跟bdate_range一样。可以用于计算一段时间(不算周末)的工作日。

### 使用Python计算指定日期范围内的休息日 为了计算指定日期范围内的休息日,包括周末和法定节假日,可以利用`chinese_calendar`库来识别这些日子。下面展示了如何导入必要的库并定义起始时间和结束时间: ```python import chinese_calendar import datetime ``` 接着,设定想要查询的时间区间: ```python start_time = datetime.date(2021, 1, 1) # 指定开始时间 end_time = datetime.date(2022, 6, 30) # 指定结束时间 ``` 通过遍历每一天,并使用`chinese_calendar.is_holiday()`方法判断某天是否为假期,以及`isoweekday()`方法检查该天是不是周六或周日(即周末),从而收集所有的休息日。 对于每一个日期对象,在循环体内执行如下逻辑操作: - 如果当天是工作日,则跳过; - 否则记录下这一天作为休息日; 具体实现方式如下所示[^3]: ```python rest_days = [] for single_date in (start_time + datetime.timedelta(n) for n in range((end_time - start_time).days + 1)): if not chinese_calendar.is_workday(single_date): rest_days.append({ "date": single_date, "type": "holiday" if chinese_calendar.get_holiday_detail(single_date)[1] else "weekend" }) ``` 上述代码片段会创建一个列表`rest_days`,其中包含了所有非工作日的信息,每个条目都是字典形式存储着具体的日期及其类型(节日还是周末)。 最后打印出结果以便查看: ```python for day_info in rest_days: print(f"{day_info['date']} 是 {day_info['type']}") ``` 这样就可以得到给定期间内所有的休息日详情了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法与编程之美

欢迎关注『算法与编程之美』

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值