问题描述
构建企业微信群机器人时想自动发消息,需要判断是否放假
解决方案
- 使用
dateutil
处理数据
pip install python-dateutil
- 收集放假安排时间表
代码
备注:此代码仅适用于2020年放假通知
from datetime import date
from dateutil.parser import parse
from dateutil.rrule import rrule, DAILY
def createDate(timestr1: str, timestr2: str = None) -> list:
'''创建日期序列
timestr2应大于等于timestr1
'''
if not timestr2:
timestr2 = timestr1
date1 = parse(timestr1)
date2 = parse(timestr2)
delta = date2 - date1
if delta.total_seconds() < 0.0:
raise ValueError('timestr2 should be greater than timestr1')
return [i.date() for i in rrule(DAILY, dtstart=parse(timestr1), until=parse(timestr2))]
def isholiday(timestr: str = None) -> bool:
'''判断是否放假
- `放假安排 <https://wannianli.tianqi.com/fangjiaanpai/>`_
:param timestr: 日期字符串,可为空
:return: True or False
'''
if timestr:
TIME = parse(timestr).date()
else:
TIME = date.today()
HOLIDAY = []
HOLIDAY.extend(createDate('2020.1.1')), # 元旦
HOLIDAY.extend(createDate('2020.1.24', '2020.2.2')) # 春节
HOLIDAY.extend(createDate('2020.4.4', '2020.4.6')) # 清明节
HOLIDAY.extend(createDate('2020.5.1', '2020.5.5')) # 劳动节
HOLIDAY.extend(createDate('2020.6.25', '2020.6.27')) # 端午节
HOLIDAY.extend(createDate('2020.10.1', '2020.10.8')) # 国庆中秋节
WORKDAY = []
WORKDAY.extend(createDate('2020.1.19')) # 春节调休
WORKDAY.extend(createDate('2020.4.26')) # 劳动节调休
WORKDAY.extend(createDate('2020.5.9')) # 劳动节调休
WORKDAY.extend(createDate('2020.6.28')) # 端午节调休
WORKDAY.extend(createDate('2020.9.27')) # 国庆中秋节调休
WORKDAY.extend(createDate('2020.10.10')) # 国庆中秋节调休
# 节假日
if TIME in HOLIDAY:
return True
# 调休
if TIME in WORKDAY:
return False
# 普通周末
if TIME.isoweekday() in [6, 7]:
return True
return False
if __name__ == '__main__':
print(isholiday()) # 今天是否放假
print(isholiday('2020.1.1')) # 春节
print(isholiday('2020.6.28')) # 端午节调休
print(isholiday('2020.7.6')) # 普通周一
print(isholiday('2020.7.11')) # 普通周六
结果
False
True
False
False
True