需求:
我有一个时间区间,我想把这个区间内的时间切割为指定个小时,但是这个区间最后一个小时不能超出当天,要保证每个区间都最低一小时,然后每个区间的开始时间不能等于上一个区间的结束时间,中间要空出1秒,结果分别放到列表里
from datetime import datetime, timedelta
def split_time_interval(start_time, end_time, num_hours):
# 将字符串时间转换为 datetime 对象
start_datetime = datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S')
end_datetime = datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S')
# 计算时间间隔
time_delta = end_datetime - start_datetime
# 计算每个小时段的长度
interval_hours = time_delta / num_hours
# 切割时间区间
start_times = []
end_times = []
current_time = start_datetime
for i in range(num_hours):
next_time = current_time + interval_hours
if next_time > end_datetime:
next_time = end_datetime
else:
next_time -= timedelta(seconds=1) # 减去1秒确保与下一个区间有间隔
start_times.append(current_time.strftime('%Y-%m-%d %H:%M:%S'))
end_times.append(next_time.strftime('%Y-%m-%d %H:%M:%S'))
current_time = next_time + timedelta(seconds=1) # 加上1秒确保与上一个区间有间隔
return start_times, end_times
start_time = '2024-03-19 00:00:00'
end_time = '2024-03-19 23:59:59'
num_hours = 3
start_times, end_times = split_time_interval(start_time, end_time, num_hours)
result = [[item1, item2] for item1, item2 in zip(start_times, end_times)]
print(result)
运行结果
[['2024-03-19 00:00:00', '2024-03-19 05:59:58'], ['2024-03-19 05:59:59', '2024-03-19 11:59:58'], ['2024-03-19 11:59:59', '2024-03-19 17:59:58'], ['2024-03-19 17:59:59', '2024-03-19 23:59:58']]
该方法为随机切割时间区间,指定区间可以在此方法做修改