python获取指定时间段内特定规律的日期列表
作者:JACK_ChenH 时间:2021-02-09 02:16:25
前言:写小程序时,遇到个需要自定义回归时间的场景,下面是实现的效果图。
于我需求而言,我只需要用到fixed_interval、weekly、per_month三个方法返回的回归间隔列表就行,最后的这个make_date_from_list方法,是为了能在这里展示效果
TIP:没有做异常处理,以及时间格式化之类的。这里只是抛砖引玉给个原型砖头出来。
实现代码:
class GetStrategyDedail:
today = datetime.date.today()
def __init__(self, begin_date, end_date):
self.begin_date = datetime.datetime.strptime(begin_date, "%Y-%m-%d")
self.end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d")
def fixed_interval(self, num):
"""
固定间隔的类型,直接使用间隔数字
:param num:间隔的天数
:return:不同时间段内,对应策略的执行时间间隔列表
"""
detail_list = list()
date_num = (self.end_date - self.begin_date).days
for i in range(num, date_num+1, num):
detail_list.append(i)
detail_list.insert(0, 0)
return detail_list
def weekly(self, i, weeks=1):
"""
每周xx,每月xx的数据类型
:param i:0-星期一,1-星期二,2-星期三,3-星期四,4-星期五,5-星期六,6-星期日
:param weeks:间隔周数,默认间隔一周
:return:不同时间段内,对应策略的执行时间间隔列表
"""
while self.begin_date.weekday() != i:
self.begin_date += datetime.timedelta(days=1)
num = (self.begin_date.date() - self.today).days
fixed_list = self.fixed_interval(weeks * 7)
fixed_list.insert(0, num)
return fixed_list
def per_month(self, date):
"""
date:指定要获取的每个月的日期
:return:不同时间段内,对应策略的执行时间间隔列表
"""
date_list = list()
specific_list = list()
year = self.begin_date.year
begin_month = self.begin_date.month
end_month = self.end_date.month
day = self.end_date.day
while begin_month <= end_month:
designated_date = f'{year}-{begin_month}-{date}'
date_list.append(datetime.datetime.strptime(designated_date, "%Y-%m-%d"))
begin_month += 1
for specific_date in date_list:
num = (specific_date.date() - self.today).days
if num > 0:
specific_list.append(num)
if day < date:
specific_list.pop()
return specific_list
def make_date_from_list(self, num, interval=1, mode='day'):
"""
:param interval: 间隔的周数,默认为1(每周)
:param num:根据mode来区分,分表代表:间隔的天数,周几(0-6/周一-周日),指定的月日期
:param mode:day, week, month
:return: 不同时间段内,对应策略的执行时间间隔列表
"""
date_list = list()
if mode == 'day':
details_list = self.fixed_interval(num)
elif mode == 'week':
details_list = self.weekly(num, interval)
elif mode == 'month':
details_list = self.per_month(num)
first_date = self.today + datetime.timedelta(details_list[0])
if mode == 'day':
for i in details_list:
date = self.begin_date.date() + datetime.timedelta(i)
date_list.append(date.isoformat())
elif mode == 'month':
for i in details_list:
date = self.today + datetime.timedelta(i)
date_list.append(date.isoformat())
else:
for i in details_list[1:]:
date = first_date + datetime.timedelta(i)
date_list.append(date.isoformat())
return date_list
来源:https://blog.csdn.net/qq_41266319/article/details/115342612
标签:python,指定时间段,日期列表
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
使table也能overflow:hidden
2008-08-18 21:04:00
设计规范有谱么?
2008-06-06 12:28:00
详解如何利用Python制作24点小游戏
2022-02-04 17:22:42
![](https://img.aspxhome.com/file/2023/2/66882_0s.jpg)
js鼠标事件大全
2007-08-13 15:56:00
Linux下Resin+JSP+MySQL安装和配置
2009-09-01 10:38:00
给页面 unload 加上效果
2009-03-12 12:32:00
从一道js笔试题到==运算符的简析
2010-05-10 20:28:00
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2023-03-08 19:38:19
WEB2.0网页制作标准教程(11)不用表格的菜单
2008-02-19 19:36:00
python对象销毁实例(垃圾回收)
2022-07-29 06:22:14
产品设计与用户体验
2009-02-02 10:15:00
javascript结合canvas实现图片旋转效果
2023-08-07 23:47:59
python使用Matplotlib画条形图
2023-09-04 06:30:50
![](https://img.aspxhome.com/file/2023/3/65113_0s.jpg)
Python Prim算法通过遍历墙实现迷宫的生成
2022-06-26 08:41:09
Go语言程序查看和诊断工具详解
2023-06-22 02:40:38
![](https://img.aspxhome.com/file/2023/8/89038_0s.jpg)
ASP生成静态网页各种方法收集整理
2008-02-18 19:25:00
Python 函数装饰器应用教程
2022-08-17 05:53:24
python 写的一个爬虫程序源码
2022-08-10 16:00:47
Python利用os模块实现自动删除磁盘文件
2023-04-06 17:04:37
![](https://img.aspxhome.com/file/2023/9/70769_0s.png)
python-docx 页面设置详解
2021-12-06 03:42:02
![](https://img.aspxhome.com/file/2023/1/76081_0s.png)