問題描述
構建企業微信羣機器人時想自動發消息,需要判斷是否放假
解決方案
- 使用
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