• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python获取指定时间段内特定规律的日期列表
    POST TIME:2021-10-18 14: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

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

    您可能感兴趣的文章:
    • 自动在Windows中运行Python脚本并定时触发功能实现
    • 实现Windows下设置定时任务来运行python脚本
    • 如何给windows设置定时任务并运行python脚本
    • python 实现定时任务的四种方式
    • python中用Scrapy实现定时爬虫的实例讲解
    • Python爬虫定时计划任务的几种常见方法(推荐)
    • python实现定时发送邮件到指定邮箱
    • python实现定时发送邮件
    • python脚本定时发送邮件
    • Python实现FTP文件定时自动下载的步骤
    • python爬虫调度器用法及实例代码
    • scrapy处理python爬虫调度详解
    • 简单的Python调度器Schedule详解
    • python编写网页爬虫脚本并实现APScheduler调度
    • Python使用定时调度任务的方式
    上一篇:python实现合并两个有序列表的示例代码
    下一篇:python 实现mysql自动增删分区的方法
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信