0%

Taro学习--python获取指定时间段工作日并排出法定假日进行人员值班安排

这个是可以说是python的学习总结吧,只是在用写taro值日表时遇到的。

需求:有个N个人员,每天2个人值日,从xxx日开始,查出yyy日,是谁值日,排出所有的法定假日。

解决思路:

1.获取 xxx 到yyy之间的工作日数量
2.计算每日的值日人数(2)能N的几倍给整除(单个人后面的可以补足)
3.人员数据根据每日值日人数进行数据切片
4.以工作日数量重复循环人员列表得到最后一组值日人数据

这里获取法定假日数据用的是www.easybots.cn的api,获取指定日期间的工作日方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def getWorkDates(startTime,endTime):
days = list(rrule.rrule(rrule.DAILY,dtstart=parse(startTime),until=parse(endTime)))
checkMouth = []
dayDatas = []
for day in days:
dayDate = '%s%s%s'%(day.year,str(day.month).zfill(2),str(day.day).zfill(2))
mouth = '%s%s'%(day.year,str(day.month).zfill(2))
if mouth not in checkMouth:
checkMouth.append(mouth)
dayDatas.append(dayDate)
checkMouth = ','.join(checkMouth)
try:
r = requests.get('http://www.easybots.cn/api/holiday.php?m='+checkMouth)
d = json.loads(r.text)
except:
r = requests.get('http://www.easybots.cn/api/holiday.php?m=' + checkMouth)
d = json.loads(r.text)
checkDays = []
for data in d:
for workDate in d[data]:
checkDays.append('%s%s'%(data,workDate))
workDates = [date for date in dayDatas if date not in checkDays]
return workDates