月初月末属工作日跑流程
在东航的项目中, 遇到这样的需求, 流程仅在月初月末跑, 但因为非工作日不上班, 所以肯定是工作日跑流程, 并且要将时间记录下来, 听起来感觉是不是特别简单呢? 但细细想来, 还是有些特殊情况, 比如国庆,10 月初当然是 10 月 1 号, 但放假, 后推一天 10 月 2 号, 放假…. 以此类推到 10 月 8 号, 工作日, 那么要如何判断?
首先, 我需要建立一个节假日区分的表格, 可以手动也可以用节假日的第三方库, 因为第三方库好像不是太准确, 所以我采用的是手敲, 当然也不是很费时间的.7e17be59b35e426484365668c55119c0_holiday.xlsx
然后我只需要分别获取当前日期以及月初月末对比判断即可找出当月工作日的月初月末日期.
代码如下:
import calendar
import time
import ubpa.iexcel as iexcel
import datetime
from xlrd.xldate import xldate_as_tuple
day_now = time.localtime() # 获取当前时间
day_begin = '%d-%02d-01' % (day_now.tm_year, day_now.tm_mon) # 月初肯定是1号
wday, monthRange = calendar.monthrange(day_now.tm_year, day_now.tm_mon) # 得到本月的天数 第一返回为月第一日为星期几(0-6), 第二返回为此月天数
day_end = '%d-%02d-%02d' % (day_now.tm_year, day_now.tm_mon, monthRange) # 月末日期
day_1 = '%d-%02d-%02d' % (day_now.tm_year, day_now.tm_mon, day_now.tm_mday) # 当前日期
# 如果今天就是月初或月末
if day_1==day_begin or day_1==day_end:
holiday_list=iexcel.read_col(path = 'C://Users//lenovo//Desktop/holiday.xlsx',cell = 'A2') # 获取今年日期列表
holiday_type_list=iexcel.read_col(path = 'C://Users//lenovo//Desktop/holiday.xlsx',cell = 'B2') # 获取今年日期类型列表
# 遍历日期列表
for i in holiday_list:
d=datetime.datetime(*xldate_as_tuple(int(i),0)).strftime('%Y-%m-%d') # 转换日期类型
# 当取到了月初日期
while d==day_begin:
# 月初日期为工作日则跳出遍历
if holiday_type_list[holiday_list.index(i)]=='工作日':
break
# 月初日期非工作日则在当前日期10天内往后推,直到是工作日,将是工作日的日期赋值给月初日期
else:
for j in range(10):
if holiday_type_list[holiday_list.index(i)+j]=='工作日':
day_begin=datetime.datetime(*xldate_as_tuple(int(holiday_list[holiday_list.index(i)+j]),0)).strftime('%Y-%m-%d')
break
# 当取到了月末日期
while d==day_end:
# 月末日期为工作日则跳出遍历
if holiday_type_list[holiday_list.index(i)]=='工作日':
break
# 月末日期非工作日则在当前日期10天内往前推,直到是工作日,将是工作日的日期赋值给月末日期
else:
for k in range(10):
if holiday_type_list[holiday_list.index(i)-k]=='工作日':
day_end=datetime.datetime(*xldate_as_tuple(int(holiday_list[holiday_list.index(i)-k]),0)).strftime('%Y-%m-%d')
break
else:
print('不是月初也不是月末,不跑流程!')
还希望大家能给些更好的方案 ~
更新一丢丢,看看这样是不是能搜索到了
thank you~ 😄
确实可以, 赞 👍
datetime.datetime.today().weekday()
可以获得周几
例外的法定节假日和调休放在 excel 里面,两者以 excel 优先即可,大量减少 excel 标注工作量
好的分享 👍