Python实现指定时间段内按固定间隔、周或月生成日期列表

一颗松果
一颗松果
发布时间:2026-10-14 | 4人浏览过
原创

本文介绍在Python中如何生成指定时间段内符合特定规律的日期列表。通过封装GetStrategyDedail类,实现了固定天数间隔、按周几循环以及按月循环三种策略。文章提供了核心代码逻辑与make_date_from_list方法的使用示例,适用于需要自定义回归时间或周期性执行任务的场景。

Python生成特定规律日期列表的方法

在开发小程序的过程中,经常遇到需要自定义回归时间的业务场景。下面展示了该功能实现后的效果界面。

针对我的具体需求,主要使用fixed_interval、weekly和per_month这三个方法来获取回归间隔列表。最后的make_date_from_list方法主要用于在此处展示最终的效果。

注意:此处未进行异常处理及时间格式化等细节优化,仅作为原型示例提供参考。

具体实现代码如下:


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

关于Python获取指定时间段内特定规律日期列表的介绍到此结束,更多相关内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表