当前位置: 首页 > article >正文

时间段切块算法

根据给定的开始时间、结束时间和时间间隔,生成一系列时间周期,每个时间周期由开始时间和结束时间组成,这些时间周期可以用于在特定时间段内进行按一定间隔的任务划分或数据处。

时间区间的切分,可以用于循环获取数据;

from datetime import datetime, timedelta

def time_periods(begin_time, end_time, interval):
    t1 = datetime.strptime(begin_time, '%Y-%m-%d %H:%M:%S')
    t2 = datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S')
    days = (t2 - t1).days
    periods = []
    for i in range(0, days + 1, interval):  # days+1, 非常关键 
        period_start = t1 + timedelta(days=i)
        period_end = min(period_start + timedelta(days=interval), t2)
        periods.append((period_start, period_end))
        
    return periods

if __name__ == '__main__':
    begin_time = '2024-08-01 08:00:00'  
    end_time = '2024-09-01 07:59:59'
    interval =8  # 自定义间隔区间
    
    periods = time_periods(begin_time, end_time, interval)

验证:

begin_time = '2024-08-01 08:00:00'  
end_time = '2024-09-01 07:59:59'
interval =3  # 自定义间隔区间


t1 = datetime.strptime(begin_time, '%Y-%m-%d %H:%M:%S')
t2 = datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S')
days = (t2 - t1).days
print(days)

periods = []
for i in range(0, days + 1, interval):  # days+1, 非常关键 
    period_start = t1 + timedelta(days=i)
    period_end = min(period_start + timedelta(days=interval), t2)
    
    print('i:',i,  ' period_start:',period_start, ' period_end:',period_start + timedelta(days=interval),  ' 结束修正:',period_end )
    
# -------------------------------------- 输出 ----------------------------------------------------
30
i: 0  period_start: 2024-08-01 08:00:00  period_end: 2024-08-04 08:00:00  结束修正: 2024-08-04 08:00:00
i: 3  period_start: 2024-08-04 08:00:00  period_end: 2024-08-07 08:00:00  结束修正: 2024-08-07 08:00:00
i: 6  period_start: 2024-08-07 08:00:00  period_end: 2024-08-10 08:00:00  结束修正: 2024-08-10 08:00:00
i: 9  period_start: 2024-08-10 08:00:00  period_end: 2024-08-13 08:00:00  结束修正: 2024-08-13 08:00:00
i: 12  period_start: 2024-08-13 08:00:00  period_end: 2024-08-16 08:00:00  结束修正: 2024-08-16 08:00:00
i: 15  period_start: 2024-08-16 08:00:00  period_end: 2024-08-19 08:00:00  结束修正: 2024-08-19 08:00:00
i: 18  period_start: 2024-08-19 08:00:00  period_end: 2024-08-22 08:00:00  结束修正: 2024-08-22 08:00:00
i: 21  period_start: 2024-08-22 08:00:00  period_end: 2024-08-25 08:00:00  结束修正: 2024-08-25 08:00:00
i: 24  period_start: 2024-08-25 08:00:00  period_end: 2024-08-28 08:00:00  结束修正: 2024-08-28 08:00:00
i: 27  period_start: 2024-08-28 08:00:00  period_end: 2024-08-31 08:00:00  结束修正: 2024-08-31 08:00:00
i: 30  period_start: 2024-08-31 08:00:00  period_end: 2024-09-03 08:00:00  结束修正: 2024-09-01 07:59:59

http://www.kler.cn/news/294532.html

相关文章:

  • Flask中 blinker 是什么
  • 【Spring基础1】- Spring 启示录-理解IoC控制反转
  • 电脑删除的Word文件怎么恢复?快速恢复技巧分享
  • C++入门基础
  • Mail PHP: 如何设置SMTP服务器以发送邮件?
  • Vue 3结合Element Plus中,实现一个级联选择器(Cascader)来展示省市区
  • CSS解析:定位和层叠上下文
  • Elasticsearch 向量数据库本地部署 及操作方法
  • Learn ComputeShader 09 Night version lenses
  • 如何使用Prometheus与Grafana监控Kubernetes集群
  • 图论基础1
  • 重启顺风车的背后,是高德难掩的“野心”
  • 高分辨率音频和传统音频区别
  • 学习笔记--Docker
  • 【机器学习】朴素贝叶斯网络的基本概念以及朴素贝叶斯网络在python中的实例
  • 【SpringBoot】使用Nacos服务注册发现与配置管理
  • 主板选购2
  • 【C/C++】Linux\Windows为什么频繁使用size_t
  • 服务器蓝屏该怎么办
  • Vue3 父子传参 简单易懂
  • Mybatis Plus快速重构真批量sql入库操作
  • PLC+AIoTedge边缘物联网平台能否替代 PLC+Wincc?
  • 13. 说说 MyBatis 的缓存机制?
  • MySQL 数据库管理与操作指南
  • 自定义view中常用到哪些方法作用分别是什么
  • 专栏前言-WooYun漏洞库环境搭建
  • Java详解String 字符串类以及String内存原理、StringBuilder类、StringJoiner类(附有代码+案例)
  • MASt3R:从3D的角度来实现图像匹配(更新中)
  • 前端工程化2:从0-1的eslint插件开发教程
  • 基于Prometheus 和K8S kubernetes 构建 搭建监控告警系统