今天在过需求的,遇到一个需求,逻辑非常简单:
逻辑:判断一个日期是否是休息日(包括节假日),如果是就往后+1天,如果还是就继续+天数,直到工作日停止
举个非常简单的例子10月1日——10月7日,都是休息日,那么,就要返回10月8日,就相当于休息日不算
输入
date_list = ['2022/10/1', '2022/10/2', '2022/10/3',
'2022/10/4', '2022/10/5', '2022/10/6',
'2022/10/7', '2022/10/8']
OUT
2022/10/08(原本是2022/10/1)
2022/10/08(原本是2022/10/2)
2022/10/08(原本是2022/10/3)
2022/10/08(原本是2022/10/4)
2022/10/08(原本是2022/10/5)
2022/10/08(原本是2022/10/6)
2022/10/08(原本是2022/10/7)
2022/10/08(原本是2022/10/8)
直接上代码(写好了满满的注释)
from datetime import datetime
from chinese_calendar import is_workday
def isWorkdays(date_value):
"""
# 判断是否是法定节假日
"""
if is_workday(date_value):
# print("{}是工作日".format(date_value))
return date_value # 返回给刚刚的递归(应该不是很绕吧这里)
else:
# print("{}是休息日".format(date_value))
import datetime
# print(type(date_value))
date = (date_value + datetime.timedelta(days=1)).strftime("%Y-%m-%d") # 如果是休息日 天数 +1
from datetime import datetime
date_value = datetime.strptime(date, '%Y-%m-%d').date() # 将字符串时间转为 <class 'datetime.date'>
# print(type(date_2),date_2)
re = isWorkdays(date_value) # 递归 如果是休息日 继续调用自己
return re # 返回给第一次调用(应该不是很绕吧这里)
# return f"{date_value}休息日"
date_list = ['2022/10/1', '2022/10/2', '2022/10/3', '2022/10/4', '2022/10/5', '2022/10/6', '2022/10/7', '2022/10/8']
for i in date_list:
date_2 = datetime.strptime(i, '%Y/%m/%d').date() # 将字符串时间转为 <class 'datetime.date'>
re = isWorkdays(date_2) # 调用判断是否为节假日 函数
re = str(re).replace("-","/")
print(re)