欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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中的日期。

新的一年,新的开始。祝各位牛年大吉!!!