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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章