如何获取两个datetime对象间x分钟间隔的时间区间列表?
如何生成两个datetime对象间按x分钟划分的时间区间二元组列表?
直接使用pandas.date_range()只能生成精确间隔的时间点,会丢失原始的结束时间。我们需要生成包含起始时间、中间按x分钟对齐的时间点,以及最终结束时间的二元组区间列表,示例如下:
输入示例
start = '2023-01-05 16:01:58' end = '2023-01-05 17:30:15' x = 30
预期输出
[ ('2023-01-05 16:01:58', '2023-01-05 16:30:00'), ('2023-01-05 16:30:00', '2023-01-05 17:00:00'), ('2023-01-05 17:00:00', '2023-01-05 17:30:00'), ('2023-01-05 17:30:00', '2023-01-05 17:30:15') ]
解决方案
结合pandas和datetime模块实现,步骤如下:
- 将字符串时间转换为
datetime对象 - 计算第一个对齐到x分钟整的时间点
- 生成中间的x分钟间隔时间点
- 拼接起始、间隔点、结束时间为二元组区间
具体代码实现:
import pandas as pd from datetime import datetime, timedelta start_str = '2023-01-05 16:01:58' end_str = '2023-01-05 17:30:15' x = 30 # 转换为datetime对象 start_dt = datetime.strptime(start_str, '%Y-%m-%d %H:%M:%S') end_dt = datetime.strptime(end_str, '%Y-%m-%d %H:%M:%S') # 计算第一个x分钟对齐的时间点 minutes = start_dt.minute remainder = minutes % x if remainder == 0: first_aligned = start_dt else: first_aligned = start_dt + timedelta(minutes=(x - remainder)) if first_aligned > end_dt: first_aligned = end_dt # 生成时间点列表 if first_aligned < end_dt: date_range = pd.date_range(start=first_aligned, end=end_dt, freq=f'{x}min') time_points = [start_dt] + list(date_range.to_pydatetime()) if time_points[-1] != end_dt: time_points.append(end_dt) else: time_points = [start_dt, end_dt] # 生成二元组区间并转换为字符串格式 intervals = [(dt.strftime('%Y-%m-%d %H:%M:%S'), dt2.strftime('%Y-%m-%d %H:%M:%S')) for dt, dt2 in zip(time_points[:-1], time_points[1:])] print(intervals)
这段代码会输出符合预期的结果,同时兼容起始时间刚好对齐x分钟、起始到结束不足x分钟等边界情况。
内容的提问来源于stack exchange,提问作者Stefano Lazzaro
相关产品推荐
相关产品推荐

