将数据时间轴划分为python列表中字典日期范围的子集



我正在根据从开始时间到结束时间的分钟频率将日期时间轴转换为更小的日期时间段。输入:

start_time = '2022-11-20-09:48:00'
last_time = '2022-11-20-08:48:00'
frequency = 300 # seconds so it is 5 minutes

what I tried so far

from datetime import datetime
def time_divider(s_time, e_time, frequency):
st_obj = datetime.strptime(s_time, '%Y-%m-%d-%H:%M:%S')
start_range = st_obj.timestamp()
end_range = datetime.strptime(e_time, '%Y-%m-%d-%H:%M:%S').timestamp()
date_segments = []
a = int(start_range)
b = int(end_range+1)
for i in range(a, b+1):
date_segments.append({datetime.fromtimestamp(i):  datetime.fromtimestamp(i + frequency)})
i = i + frequency
return date_segments
date_s = time_divider(start_time, last_time, 300)
print(date_s)

当前输出:

[]

期望的输出和输出应该以这个顺序出现

{datetime.datetime(2022, 11, 20, 9, 48): datetime.datetime(2022, 11, 20, 9, 52),datetime.datetime(2022, 11, 20, 9, 53): datetime.datetime(2022, 11, 20, 9, 57), datetime.datetime(2022, 11, 20, 9, 57): datetime.datetime(2022, 11, 20, 10, 02 ), ...}

start_time应小于end_time

:

start_time = '2022-11-20-08:48:00'

last_time = '2022-11-20-09:48:00'

,如果我们在48中有5 minutes,它将成为53,而不是您在预期输出中提到的52

这是可能解决问题的办法。

from datetime import datetime, timedelta

start_time = '2022-11-20-08:48:00'
last_time = '2022-11-20-09:48:00'
frequency = 300  # seconds so it is 5 minutes

def time_divider(s_time, e_time, frequency):
st_obj = datetime.strptime(s_time, '%Y-%m-%d-%H:%M:%S')
end_range = datetime.strptime(e_time, '%Y-%m-%d-%H:%M:%S')
date_segments = []
while st_obj <= end_range:
old_st_obj = st_obj
st_obj = st_obj + timedelta(seconds=frequency)
date_segments.append({old_st_obj: st_obj})
return date_segments

date_s = time_divider(start_time, last_time, 300)
print(date_s)

最新更新