时间段切块算法

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

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

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值