我正在根据从开始时间到结束时间的分钟频率将日期时间轴转换为更小的日期时间段。输入:
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)