python获取指定时间段内特定规律的日期列表

作者:JACK_ChenH 时间:2021-02-09 02:16:25 

前言:写小程序时,遇到个需要自定义回归时间的场景,下面是实现的效果图。

    于我需求而言,我只需要用到fixed_interval、weekly、per_month三个方法返回的回归间隔列表就行,最后的这个make_date_from_list方法,是为了能在这里展示效果

    TIP:没有做异常处理,以及时间格式化之类的。这里只是抛砖引玉给个原型砖头出来。

python获取指定时间段内特定规律的日期列表

实现代码:


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,指定时间段,日期列表
0
投稿

猜你喜欢

  • Python利用reportlab实现制作pdf报告

    2023-10-25 05:26:36
  • Python反转序列的方法实例分析

    2021-10-30 11:13:07
  • 好习惯和坏习惯

    2009-01-20 12:51:00
  • golang 对私有函数进行单元测试的实例

    2024-05-13 10:43:54
  • 详解Python如何利用turtle绘制中国结

    2021-02-10 13:52:29
  • Python读取sqlite数据库文件的方法分析

    2024-01-21 11:57:15
  • 探讨链接打开方式

    2009-03-16 16:55:00
  • php依赖注入知识点详解

    2024-05-02 17:33:00
  • python中找出numpy array数组的最值及其索引方法

    2022-11-26 14:24:00
  • MYSQL中文乱码问题的解决方案

    2024-01-18 00:49:48
  • Python argparse模块使用方法解析

    2022-10-12 10:58:57
  • Python运行DLL文件的方法

    2021-12-25 15:23:21
  • Python双端队列deque的实现

    2022-07-07 02:37:29
  • Mysql使用索引实现查询优化

    2024-01-16 03:59:35
  • 详谈js遍历集合(Array,Map,Set)

    2024-04-16 09:29:53
  • SQL Server中单引号的两种处理技巧

    2008-05-23 13:30:00
  • Vue使用Less与Scss实现主题切换方法详细讲解

    2024-04-27 15:48:13
  • Python中np.argmax()函数用法示例

    2021-06-17 23:47:09
  • Python urllib库如何添加headers过程解析

    2023-01-09 00:07:35
  • django项目中使用云片网发送短信验证码的实现

    2021-09-20 18:35:23
  • asp之家 网络编程 m.aspxhome.com