You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取两个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模块实现,步骤如下:

  1. 将字符串时间转换为datetime对象
  2. 计算第一个对齐到x分钟整的时间点
  3. 生成中间的x分钟间隔时间点
  4. 拼接起始、间隔点、结束时间为二元组区间

具体代码实现:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:25:40