当前位置: 首页 > 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/a/294532.html

相关文章:

  • 3D绘制动态爱心Matlab
  • 【ChatGPT】 如何让ChatGPT分析数据并得出结论
  • 智能电视/盒子的应用管理——通过ADB工具优化体验
  • stringUtils详细解释
  • 黄色校正电容102j100
  • Rust 建造者模式
  • 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 父子传参 简单易懂