python 任意时间段内的工作日计算(剔除法定节假日和周末)
程序员文章站
2022-03-03 10:36:35
...
之前找到一个python的包,可以计算一个自然月内的工作日共几天。
但是不能计算任意时间段内的工作日共有几天,经过查找资料,总算找到了一种方法。
所以便记录下来,有需要的小伙伴可以自行拿去用。
代码如下:
import pandas as pd
from pandas.tseries.offsets import CustomBusinessDay
def count_weekday(s_day, e_day):
holidays_list= CustomBusinessDay(holidays=['2021-01-01', '2021-02-11', '2021-02-12', '2021-02-15', '2021-02-16', '2021-02-17',
'2021-04-05', '2021-05-03', '2021-05-04', '2021-05-05', '2021-06-14', '2021-09-20',
'2021-09-21', '2021-10-01', '2021-10-04', '2021-10-05', '2021-10-06', '2021-10-07'])
bus_day = pd.date_range(start=s_day, end=e_day, freq=b)
length = len(bus_day)
extra_work_day = ['2021-02-07','2021-02-20', '2021-04-25', '2021-05-28', '2021-09-18', '2021-09-26','2021-10-09']
extra_len = 0
for i in extra_work_day:
if s_day <= i <= e_day:
extra_len = extra_len + 1
week_data = length + extra_len
# print(week_data)
return week_data
if __name__ == '__main__':
count_weekday('2021-03-01', '2021-03-16')
仔细看一下就知道,变量 holidays_list中的日期,大部分为法定假期的放假时间,但是和日历上对比发现,好像并不全。
原因很简单,因为有些法定假期的日期刚好是周末,那自然也就不是工作日。 holidays_list里面只需要手动编辑进去每年那些法定假期非周六日的日期即可。(这也就是我们经常口中的说的,说是xx天假,但是周末本身就是放假,实际假期只有1.2天,难受啊,马飞~~~!)
extra_work_day这个变量中,需要编辑的是每年需要补班的日期。这个日期具体哪一天,可以百度万年历添加即可。
此外,需要注意的是,s_day,e_day这两个日期参数,是需要str格式的。
最后一点要说的就是,因为每年的法定假期的日期尽不相同,所以如果长期有这个需求,记得随时更新holidays_list,extra_work_day中的日期。
新的一年,新的开始。祝各位牛年大吉!!!
上一篇: 110 平衡二叉树
下一篇: Java开发工具的使用方法