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

2023-11-06

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

    于我需求而言,我只需要用到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 weekly(self, i, weeks=1):
        """
        每周xx,每月xx的数据类型
        :param i:0-星期一,1-星期二,2-星期三,3-星期四,4-星期五,5-星期六,6-星期日
        :param weeks:间隔周数,默认间隔一周
        :return:不同时间段内,对应策略的执行时间间隔列表
        """
        num_list = list()
        init_day = self.today
        if len(i) > 1:
            while init_day <= self.end_date.date():
                if init_day.weekday() in i:
                    num = (init_day - self.today).days
                    num_list.append(num)
                init_day += datetime.timedelta(days=1)
            return num_list
        else:
            while self.begin_date.weekday() != i[0]:
                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())
            if len(num) == 1:
                for i in details_list[1:]:
                    date = first_date + datetime.timedelta(i)
                    date_list.append(date.isoformat())
            else:
                for i in details_list:
                    date = self.today + datetime.timedelta(days=i)
                    date_list.append(date.isoformat())

        return date_list

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 超实用的IDEA插件推荐,百万级下载量

    超实用的30多款idea插件 有百万级下载量的优秀插件 你值得拥有 好的工具助你事半功倍 快速协助敲出更漂亮更有效率的代码 搬运工这里收集了很不错的IDEA插件 相信你一定会喜欢的 必备插件列表 Grep Console 自定义控制台输出格
  • C#常用代码

    最近学习用C 写了几个程序 记录一下常用的几个操作 方便以后Copy 文件操作 FileStream fs null try byte buf FileStream fs new FileStream strSampleFileName F
  • Ubuntu16.04下opencv2与ROSkinetic中自带opencv3不兼容问题总结

    1 背景 从ROSindigo换到ROSkinetic ROSkinetic中自带的opencv3 与原来indigo中opencv2不一样 所以原来的涉及opencv的程序都出了问题 最近这两天就一直在改兼容性 清明节最后一天了 总结一下
  • WebStorm2016.2 注册码及激活,2018.6.14亲测有效

    License server激活 这可能是最简单的了 在激活框 选择 License server 输入 http idea iteblog com key php 2018 6 14可用
  • table自定义表格的封装

    前言 对原生的table进行封装 让他满足我们一行显示不同个的需求 实现效果 如图所示 一行显示不同数量的内容 实现代码 1 封装的组件 custom table vue 源码看下面 1 一行显示几个td 2 表头数据 表格数据 3 js封
  • 深度学习python图像标记工具labelTool

    深度学习训练需要标记图像位置和类别 之前用的时候是叫做BBox Label Tool master 遇到大图像就显示不完整了 没有自适应缩放 这是改进后的Python脚本 目录结构 图片目录名images 标签目录名labels 图像目录下
  • JDK 新特性篇:JDK 8 新特性详解

    Java8新特性简介 Java 8 又称为 JDK 1 8 是 Java 语言开发的一个主要版本 Java 8 是 Oracle 公司于 2014 年 3 月发布 可以看成是自 Java 5 以来最具革命性的版本 Java 8 为 Java
  • 函数重载和缺省参数

    函数重载 C 允许在同一作用域类声明几个功能类似的同名函数 但是这些同名函数的形式参数 指参数的个数 类型或者顺序 必须不同 也就是说用同一个运算符完成不同的运算功能 函数重载必须是参数的个数或者类型不同 与返回值无关 在C语言当中是不支持
  • 李宏毅机器学习——梯度下降详细讲解

    文章目录 梯度下降 1 学习率 1 1自适应学习率 1 2 Adagrad算法 2 随机梯度下降 3 特征缩放 3 1 特征缩放原因 3 2 特征缩放方法 4 梯度下降的限制 梯度下降 梯度下降是为了解决回归方程中参数的最优化问题 即表现为
  • STM32F446+OLED12864做贪吃蛇游戏

    上面是我的微信和QQ群 欢迎新朋友的加入 闲暇之余发现看了下OLED12864的数据手册 发现他的显示在Y轴上只有页写 也就是一次写8个点 突然想到 如果自己程序需要精准定位到某个点 那这不是会很艹蛋么 去网上搜索 基本上都是页写的代码 也
  • mysql 自动备份(windows 环境)

    windows环境设置mysql自动备份 测试成功 要实现数据库的自动备份就需要一下两步 一 利用MySQL提供的备份命令mysqldump 结合Windows的任务计划程序 实现步骤 编写脚本 说明 该脚本不会关闭数据库 并且可以按每一天
  • C#强制杀进程

    通过cmd命令实现 using System using System Collections Generic using System Linq using System Text using System Threading Tasks
  • 小波矩特征提取matlab代码

    这是我上研究生时写的小波矩特征提取代码 新归一化方法小波矩特征提取 F imread a1 bmp F im2bw F F imresize F 128 128 求取最上点for i 1 128 for j 1 128 if F i j 1
  • AVPlayer 播放在线视频和本地文件的设置区别

    http blog csdn net u012671808 article details 30500595 comments
  • 动态文件版通讯录及C语言中的文件的读写操作

    上一期我们编写了一个C语言版本的简易通讯录 但是我们的之前的通讯录是没有记忆功能的 也就是说 一旦关闭了程序我们存储在里面的数据也就消失了 那么今天我们就来实现一个附带数据储存的通讯录 在此之前 我们先来了解一下C语言中文件的读写函数 1
  • QT-通过控件ObjectName获取控制

    QT 通过控件ObjectName获取控制 示例 1 说明解释 示例 1 说明解释 代码如下 QString strObjectName QString lineEditDev5IP QLineEdit pLineEdit this gt
  • KVM中的ballooning详解

    KVM中的ballooning详解 1 Ballooning简介 通常来说 要改变客户机占用的宿主机内存 是要先关闭客户机 修改启动时的内存配置 然后重启客户机才能实现 而内存的ballooning 气球 技术可以在客户机运行时动态地调整它
  • kibana数据导入导出_怎么实现kibana的数据导入导出

    匿名用户 1级 2016 10 19 回答 logstash好说 client只需要在代码逻辑改下redis地址就可以了 logstash server直接docker pull镜像就可以了 elasticsearch需要我们自己写脚本迁移
  • 机器翻译 深度学习预处理实战(中英文互译)一

    深度学习预处理实战 中英文互译 文章目录 深度学习预处理实战 中英文互译 前言 一 获取中英互译的数据集 二 具体步骤 1 首先引入相关库 2 中英文预处理 3 主函数运行 前言 基于深度学习的机器翻译学习分为三步 1 解决自动将一种自然语
  • python获取指定时间段内特定规律的日期列表

    前言 写小程序时 遇到个需要自定义回归时间的场景 下面是实现的效果图 于我需求而言 我只需要用到fixed interval weekly per month三个方法返回的回归间隔列表就行 最后的这个make date from list方