首页 > 其他分享 >chinesecalendar:判断日期是不是工作日

chinesecalendar:判断日期是不是工作日

时间:2024-05-09 14:47:48浏览次数:18  
标签:chinesecalendar datetime 日期 return True day today 工作日

工作与学习中,有个场景需要判断指定日期是不是工作日,例如自动化办公工作日自动发邮件,量化交易判断是否为交易日等等, 因此我们需要能准确判断给的日期是不是工作日,Python中一般使用模块chinesecalendar来解决这个问题。

网友自己维护

from datetime import datetime

# 休:正常工作日(周一至周五)放假日期
holidays_exception = [
    '20200101',  # 元旦,周三
    '20200122',  # 如:公司提前放假
    '20200123',  # 如:公司提前放假
    '20200124',  # 除夕,周五
    '20200127',  # 春节,周一
    '20200128',  # 春节
    '20200129',  # 春节
    '20200130',  # 春节,周四
    '20200131',  # 新冠疫情国务院放假
    '20200201',  # 新冠疫情国务院放假
    '20200406',  # 清明,周一
    '20200501',  # 劳动节,周五
    '20200504',  # 劳动节,周一
    '20200505',  # 劳动节,周二
    '20200625',  # 端午,周二
    '20200626',  # 端午,周二
    '20201001',  # 国庆,周四
    '20201002',  # 国庆,周五
    '20201005',  # 国庆,周一
    '20201006',  # 国庆,周二
    '20201007',  # 国庆,周三
    '20201008',  # 国庆,周四
]

# 班:正常周末(周六和周五)上班日期
workdays_exception = [
    '20200201',  # 春节, 周六
    '20200426',  # 劳动节, 周日
    '20200509',  # 劳动节, 周六
    '20200628',  # 端午, 周日
    '20200927',  # 国庆,周六
    '20201010',  # 国庆,周六
]

def is_workday(day=None):
    """
        Args:
            day: 日期, 默认为今日

        Returns:
            True: 上班
            False: 放假
    """
    # 如果不传入参数则为今天
    today = datetime.today()
    # logger.info(today)
    day = day or today

    week_day = datetime.weekday(day) + 1  # 今天星期几(星期一 = 1,周日 = 7)
    is_work_day_in_week = week_day in range(1, 6)  # 这周是不是非周末,正常工作日, 不考虑调假
    day_str = f'{day.year}{str(day.month).zfill(2)}{str(day.day).zfill(2)}'
    if day_str in workdays_exception:
            return True
        elif day_str in holidays_exception:
            return False
        elif is_work_day_in_week:
            return True
        else:
            return False

def is_holiday(day=None):
    # 如果不传入参数则为今天
    today = datetime.today()
    day = day or today
    if is_workday(day):
        return False
    else:
        return True

# 判断指定日期

is_workday(datetime(2020, 8, 1)) # 不是工作日,False
is_holiday(datetime(2020, 8, 1)) # 是休假日,True

# 判断当天
is_workday() # 是不是工作日,True 为是
is_holiday() # 是不是休假日,True 为是

安装

官方文档:https://pypi.org/project/chinesecalendar/

pip install chinesecalendar

使用

import datetime
from chinese_calendar import is_workday


# 判断是否为工作日
date = datetime.datetime.now().date()

date2 = datetime.date(2023, 9, 25)

if is_workday(date2):
    print("是工作日")
else:
    print("是休息日")
    
# 判断是否为调休日
from chinese_calendar import is_in_lieu

print(is_in_lieu(date2))

来自: 每日一模块:chinesecalendar

标签:chinesecalendar,datetime,日期,return,True,day,today,工作日
From: https://www.cnblogs.com/luckzack/p/18182209

相关文章

  • 获取当前时间和日期并转换为本地时间
    文件IO练习:设计程序,获取当前系统时间,把时间转换为特定格式”yy年mm月dd日星期xtt:mm:ss”,并每隔1s写入到本地磁盘中一个叫做log.txt的文本中,如果文本不存在则创建。目录文件IO练习:考察点:time函数localtime函数题目解答:参考考察点:time函数**返回**1970-1-1,00:00:00以来......
  • datetime:Python日期与时间值管理计算
    前言datetime库也用于时间日期的处理,主要用于完成日期和时间的解析,格式化和算术运算。本篇,将完整的介绍datetime库的应用知识。datetime.date与time库一样,datetime库也有获取当前日期的类,日历日期值用datetime.date表示。比如datetime.date.today()。具体代码如下:importdate......
  • python-设计异常处理类Cexception,并基于异常处理类设计并实现日期类Date
    【题目描述】定义一个异常类Cexception解决日期类实现中的自定义异常处理。设计的日期类应包含以下内容:① 有三个成员数据:年、月、日;② 有设置日期的成员函数;③ 有用格式"月/日/年"输出日期的成员函数;④ 要求在日期设置及有参构造函数中添加异常处理。【源代码程序......
  • ts时间戳转日期
    /**时间戳转日期*/consttimestampToDate=(timestamp:any)=>{if(timestamp==null||timestamp==undefined)return"";constdate=newDate(timestamp);constyear=date.getFullYear();constmonth=String(date.getMonth()+1).padSt......
  • chinesecalendar:判断日期是不是工作日
    工作与学习中,有个场景需要判断指定日期是不是工作日,例如自动化办公工作日自动发邮件,量化交易判断是否为交易日等等,因此我们需要能准确判断给的日期是不是工作日,Python中一般使用模块chinesecalendar来解决这个问题。网友自己维护fromdatetimeimportdatetime#休:正常工作日......
  • JS实现图表日期分类按色显示
    预想要达成的效果图: 关键步聚: js代码如下function(){vardate=newDate(this);if(date.getDay()==0||date.getDay()==6){return"<fontcolor='red'>"+date.getDate()+"</font>"}else{returndate.getD......
  • 动态设置时间显示:hh:mm、星期、或具体日期
    封装共同方法exportfunctionformatMsgTime(time){//time传入的是时间戳,且时间戳长度为10位consttodayZero=newDate().setHours(0,0,0,0);constyearZero=newDate(newDate().getFullYear(),0,1,0,0,0,0).getTime();consttarget=newD......
  • dayjs 根据选择的日期获取当前周的周一到周天
    //设置表头日期constsetHeadDate=(val:any)=>{constnowDay=dayjs(val).day()//这周的第一天letstr:any=nullif(nowDay){//非周天,即当周str=dayjs(val).startOf('week').add(1,'day')}else{//周天,先减去一天,当作是上周的,然后......
  • 文件(夹)批量重命名数字、字母、日期、中文数字大写小写
     首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z目标是重命名下面5个文件(也可以是文件夹等,任意),从大写中文数字“贰”开始 打开工具,找到“文件批量复制”版块,快捷键Ctrl+5 找到右下角重命名按钮,点击打开 把那5个要重命名的文件拖入(也可以右边的按钮......
  • linux21-日期时间
    linux21-日期时间date查看系统时间更改/etc/localtime修改时区ntp自动校准时区date查看系统时间date[-d][+格式化字符串]-d,通过给定的字符串显示日期,一般用于日期计算,支持以下时间标记year年month月day天hour小时minute分钟s......