Python判断是否放假

    技术2023-11-03  82

    文章目录

    问题描述解决方案代码参考文献

    问题描述

    构建企业微信群机器人时想自动发消息,需要判断是否放假

    解决方案

    使用 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

    参考文献

    放假安排时间表Python日期时间处理库dateutil
    Processed: 0.015, SQL: 9