python 如何利用chinese_calendar 获取上一个工作日日期
作者:Runaway_pilot 发布时间:2022-01-12 12:07:32
标签:python,chinesecalendar,工作日,日期
**截止文章发布chinese_calendar版本为1.8.0,大约在每年的11月份更新次年的节假日新版本
import datetime
from chinese_calendar import is_workday
def get_pervious_work_day(day: datetime):
"""获取上一个工作日"""
day = day - datetime.timedelta(days=1)
if is_workday(day):
return day
return get_pervious_work_day(day)
测试周六日:
today = datetime.date.today().replace(day=20)
date = get_pervious_work_day(today)
print(date)
测试2023春节:
today = datetime.date.today().replace(day=28).replace(month=1)
date = get_pervious_work_day(today)
print(date)
测试2023劳动节:
today = datetime.date.today().replace(day=4).replace(month=5)
date = get_pervious_work_day(today)
print(date)
测试2023国庆节:
today = datetime.date.today().replace(day=7).replace(month=10)
date = get_pervious_work_day(today)
print(date)
扩展:Python计算某个工作日后的日期
刚开始想自己写,但是因为中国的节假日时间并不是固定的,因此需要自己持续并手动填写日期是否是法定节假日,比较麻烦,所以找到python有一个叫chinese_calendar的模块,该作者应该会持续更新
代码和思路其实都很简单
我的需求是计算某一日期开始,多少个工作日后这个日期是多少
下面的例子,是我用2021年9月10日到2022年9月10日这一年的时间范围内
要计算2021年9月10日之后30个工作日,是什么日期
import chinese_calendar
import datetime
def after_work_day():
year = 2021
month = 9
day = 10
# after_work_days是设置多少个工作日
after_work_days = 30
next_year = year + 1
range_time = datetime.datetime(next_year, month, day)
# 如果一年后的时间超过了模块规定的最长时间,那么直接取最新版的最大时间 截止目前(2022.11.30)最新版到2022年末,需要等国家 * 了明年的放假安排之后可能才会更新
if range_time >= datetime.datetime(2022, 12, 31):
range_time = datetime.datetime(2022, 12, 31)
work_days = chinese_calendar.get_workdays(datetime.datetime(year, month, day), range_time)
count = 0
for work_day in work_days:
count += 1
if count > after_work_days:
print(work_day)
break
if __name__ == '__main__':
after_work_day()
有一个需要注意的点就是二月份的天数,闰年和平年的天数不一样,根据需求考虑进去
来源:https://blog.csdn.net/Runaway_pilot/article/details/129080572
0
投稿
猜你喜欢
- 外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT J
- 我的长博文不少,比较影响阅读体验,有必要添加一个文章目录功能。相比 Wordpress, Typecho 的插件就比较少了。我想找一个像掘金
- 一、项目背景:为了回顾关于django的文件上传和分页功能,打算写一个微型的小说网站练练手。花了一个下午的时间,写了个小项目,发现其中其实遇
- 本文用python写了一个会员管理系统,供大家参考,具体内容如下:"""后台管理员前台会员信息系统1.后台管理
- 这两个字符串真实长度和取固定长度的字符串函数是在 photo.163.com 的js文件里看到的。 作者&nb
- 实例一:题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?程序分析:可填在百位、十位、个位的数字都是1、
- 前言:作为测试工程师都知道,json格式的文件使我们常用的一种数据存放形式,那么对于python文件的处理,python语言有着得天独厚的条
- Delphi连接MySQL真麻烦,研究了一天,从网上找了无数文章,下载了无数插件都没解决。最后返璞归真,老老实实用ADO来连接,发现也不是很
- 本程序是利用3.x的Firefox浏览器可以读取本地文件的特性,实现通过xmlHttPRequest上传大文件功能,并在可以上传过程中动态显
- Div的浮动+循环(描述的不清楚,请看图)在设计和布局的时候,碰到图片循环问题,碰到间距问题,怎么样让循环的图片每行的起始点跟上边的titl
- Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了或者某一对象非常复杂了
- 在实现算法的时候,通常会从两方面考虑算法的复杂度,即时间复杂度和空间复杂度。顾名思义,时间复杂度用于度量算法的计算工作量,空间复杂度用于度量
- 第一列按照goodsid局部分组,然后在分组后的记录中按照audittime升序排序得到序号,从而显示某商品得第几次变迁。 第二列是取该商品
- asp正则表达式检测字符串是否是数字及字母。<% '函数:CheckString(strng) '
- 本文实例讲述了python使用Image处理图片常用技巧。分享给大家供大家参考。具体分析如下:使用python来处理图片是非常方便的,下面提
- 本文实例讲述了python计算一个序列的平均值的方法。分享给大家供大家参考。具体如下:def average(seq, total=0.0)
- 是否曾经有过这样的经历:把一个元素置于另一个元素之上,而希望下面的那个元素成为可点击的?现在,利用css的pointer-events属性即
- 网站上的Banner条,是网站用来作为盈利或者是发布一些重要的信息的工具。但是它又不能作为网页的主要内容,因为它的主要目的是吸引人的注意力,
- 本文实例讲述了php设计模式之正面模式。分享给大家供大家参考,具体如下:星际里面的战斗都是在地图上进行的,只要我们可以编辑地图,就可以创造一
- 导读:由于banner一般用于专题类网站,在门户网站的二级页面,用户进来之前,在首页已经对主题有一定的了解和认识,所以banner的作用是在