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

如何识别列表中的连续时间区间?附具体日期列表示例

检测日期列表中的连续月份区间

没问题,我来帮你搞定这个连续日期区间的检测需求!咱们可以用Python来实现这个功能,核心思路是把每个月份字符串转换成可计算的日期对象,然后逐个检查相邻月份是否连续,以此来分组。

实现步骤与代码

首先,我们需要用datetime模块处理日期,再借助dateutil.relativedelta来方便地计算下一个月份(如果你的环境没装python-dateutil,先运行pip install python-dateutil安装)。

from datetime import datetime
from dateutil.relativedelta import relativedelta

dates = ['2017-07', '2017-08', '2017-09', '2017-10', '2017-11', '2017-12', '2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06', '2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2020-01', '2020-03', '2020-04', '2020-05', '2020-09', '2020-10']

# 初始化结果列表和当前连续组
result = []
current_group = [dates[0]]

# 从第二个元素开始遍历
for date_str in dates[1:]:
    # 把当前日期和组内最后一个日期转成datetime对象
    current_date = datetime.strptime(date_str, '%Y-%m')
    last_date_in_group = datetime.strptime(current_group[-1], '%Y-%m')
    
    # 计算组内最后一个日期的下一个月
    next_month = last_date_in_group + relativedelta(months=1)
    
    # 如果当前日期正好是下一个月,就加入当前组;否则结束当前组,开启新组
    if current_date == next_month:
        current_group.append(date_str)
    else:
        result.append(current_group)
        current_group = [date_str]

# 别忘了把最后一个组加入结果
result.append(current_group)

# 打印结果
for interval in result:
    print(interval)

代码解释

  1. 日期转换:用datetime.strptime把YYYY-MM格式的字符串转成日期对象,方便后续计算。
  2. 连续判断:用relativedelta(months=1)计算上一个日期的下一个月,和当前日期对比,如果相等说明是连续月份。
  3. 分组逻辑:一开始把第一个日期作为初始组,之后每遇到不连续的月份,就把当前组存入结果,再新建一个组;遍历结束后要把最后一个组也加入结果。

运行结果

运行上面的代码,你会得到和你期望完全一致的结果:

['2017-07', '2017-08', '2017-09', '2017-10', '2017-11', '2017-12']
['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06', '2019-07', '2019-08', '2019-09', '2019-10', '2019-11']
['2020-01']
['2020-03', '2020-04', '2020-05']
['2020-09', '2020-10']

内容的提问来源于stack exchange,提问作者Bisimwa Ro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:18:21