首先区分一下这里的工作日和节假日是不同的。
工作日
是指去掉节假日即周末,但是不去掉调休的日期。
交易日
主要针对金融行业,是指去掉节假日和周末,因为周末金融市场也是停盘的,所以即使周末因为调休工作,也不算做交易日。
我们这里主要用到Python中datetime模块。还有一个特别好用的模块就是chinesecalendar,它主要能够实时更新中国的节假日有哪些,简直就是一个利器。
首先安装chinesecalendar也非常容易,我是在Anaconda Promot中安装的:
pip install chinesecalendar
安装完成之后,下面看一下两个方法的使用:
- is_workday:判断是否为工作日,返回布尔值
- is_holiday:判断是否为节假日,返回布尔值
from chinese_calendar import is_workday, is_holiday
import datetime
day1 = datetime.date(2020,1,18)
day2 = datetime.date(2020,1,19)
day3 = datetime.date(2020,1,31)
print(is_workday(day1))
print(is_holiday(day1))
print(is_workday(day2))
print(is_workday(day3))
2020-01-18是正常周日,所以不是工作日;2020-01-19是春节调休的工作日;2020-01-31是正月初七,是受今年新冠疫情影响延长的春节假期,也不算工作日。是不是很厉害,连这个都可以识别。有了它,我们就可以轻松识别我们的节假日了。
下面计算两个日期间的工作日天数:
def workdays(start,end):
计算两个日期间的工作日
start:开始时间
end:结束时间
from datetime import datetime,timedelta
from chinese_calendar import is_workday
if type(start) == str:
start = datetime.strptime(start,'%Y-%m-%d').date()
if type(end) == str:
end = datetime.strptime(end,'%Y-%m-%d').date()
if start > end:
start,end = end,start
counts = 0
while True:
if start > end:
break
if is_workday(start):
counts += 1
start += timedelta(days=1)
return counts
封装函数workdays(start,end)。可以接受形式为’%Y-%m-%d’字符串格式或日期格式的日期。下面运行看一下效果:
print(workdays('2020-01-19','2020-01-24'))
from datetime import date
print(workdays(date(2020,1,19),date(2020,1,24)))
2020-01-19是调休工作日,所以一共是5天。
计算交易日天数:
def tradedays(start,end):
计算两个日期间的工作日
start:开始时间
end:结束时间
from datetime import datetime,timedelta
from chinese_calendar import is_holiday
if type(start) == str:
start = datetime.strptime(start,'%Y-%m-%d').date()
if type(end) == str:
end = datetime.strptime(end,'%Y-%m-%d').date()
if start > end:
start,end = end,start
counts = 0
while True:
if start > end:
break
if is_holiday(start) or start.weekday()==5 or start.weekday()==6:
start += timedelta(days=1)
continue
counts += 1
start += timedelta(days=1)
return counts
这里主要是需要排除所有的节假日和周六日。
运行看下效果:
print(tradedays('2020-01-19','2020-01-24'))
from datetime import date
print(workdays(date(2020,1,24),date(2020,1,19)))
因为2020-01-19虽然是工作日,但是是周日,所以不算交易日。
两个函数一个是计算工作日,一个计算交易日,都可以直接拿去使用,注意传参的格式,或者自行进行修改使用。
首先区分一下这里的工作日和节假日是不同的。工作日是指去掉节假日即周末,但是不去掉调休的日期。交易日主要针对金融行业,是指去掉节假日和周末,因为周末金融市场也是停盘的,所以即使周末因为调休工作,也不算做交易日。我们这里主要用到Python中datetime模块。还有一个特别好用的模块就是chinesecalendar,它主要能够实时更新中国的节假日有哪些,简直就是一个利器。首先安装chine...
微信公众号(年更选手):数据闲逛人 | Github开源项目:数分/数挖study路线 https://github.com/jc-dian/python_data_analysis
08-09
(1)bdate_range(start_day, end_day,freq='b')
start_day: 开始日期,日期格式可以兼容多种格式:2020-01-1或20200101或者1/1/2020!!!可以说是很完美了。
end_day:结束日期
fr......
python判断工作日,节假日模块 chinesecalendar爬虫式的方法模块 pandas实例
模块 chinesecalendar
针对中国的节假日,强烈推荐。
https://pypi.org/project/chinesecalendar/
哪怕日期属于周一到周五的某一天,但它属于中国的节假日,就会判断这一天为休息日。比如元旦,春节,清明节之类的节假日。同理,如果日期属于周末,但它是调休的,那这一天就是工作日。
# 导入模块
import datetime
from chinese_calend
加减某个时间间隔函数date_add()与date_sub()
date_add(‘某个日期时间’,interval 1 时间种类名);
例:select date_add(curdate(), interval 1 year); //加1年
select
使用pandas 自定义节假日规则,补班规则,一定日期内遇到节假日或者周末延后对应天数
到 中间有 天休息日;而且10月8日(星期六)、10月9日(星期日)上班
输出结果将,额外的工作日也计算进去了,跳过n天休息日,增加n天工作日...
在这个示例中,我们使用了 `datetime` 库中的 `datetime` 类来表示两个日期,然后使用了 `timedelta` 函数来计算两个日期之间的天数。
这个示例输出了两个日期之间的天数,也就是 14 天。
所以新手使用celery很仔细的建立文件夹名字、文件夹层级、python文件名字。
所以网上的celery博客教程虽然很多,但是并不能学会使用,因为要运行起来需要以下6个方面都掌握好,博客文字很难表达清楚或者没有写全面以下6个方面。
celery消费任务不执行或者报错NotRegistered,与很多方面有关系,如果要别人排错,至少要发以下6方面的截图,因为与一下6点关系很大。
1)整个项目目录结构, 2)@task入参 ,3)celery的配置,4)celery的配置 include ,5)cmd命令行启动参数 --queues= 的值,6)用户在启动cmd命令行时候,用户所在的文件夹。
在不规范的文件夹路径下,使用celery难度很高,一般教程都没教。
[项目文件夹目录格式不规范下的celery使用演示](https://github.com/ydf0509/celery_demo) 。
此国产分布式函数调度框架 funboost python万能通用函数加速器 https://funboost.readthedocs.io/ ,
从用法调用难度,用户所需代码量,超高并发性能,qps控频精确程度,支持的中间件类型,任务控制方式,稳定程度等19个方面全方位超过celery。发布性能提高1000%,消费性能提高2000%。
python万能分布式函数调度框架funboost支持python所有类型的并发模式和一切知名消息队列中间件,python函数加速器,框架包罗万象,一统编程思维,与业务不绑定,适用范围广。
pip install funboost
Flask入门(9):蓝图
programmer_ada:
python数据结构:数组、链表、栈、队列、树