Python判断是否放假

问题描述

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




解决方案

  1. 使用 dateutil 处理数据
pip install python-dateutil
  1. 收集放假安排时间表

在这里插入图片描述




代码

备注:此代码仅适用于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




参考文献

  1. 放假安排时间表
  2. Python日期时间处理库dateutil
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章