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

如何生成从起始日期到结束日期、间隔7天的日期列表?代码调试求助

生成间隔7天的日期列表 & 代码问题排查

先说说你代码里的问题

你的代码之所以没有输出列表长度,是因为循环永远无法终止,程序一直卡在while循环里跑,根本到不了最后的print语句。具体问题出在这行:

tdate = sdate+timedelta(days=i)

你每次更新tdate的时候,都是从初始的sdate(1990-10-25)加上7天,结果tdate永远停在1990-11-01,永远小于adate(2022-12-31),循环条件adate > tdate永远为真,自然不会执行到后面的打印代码。

另外还有个小问题:你初始化的sdate和tdate是同一个日期,而且i的值固定为7,完全没起到递增的作用。

正确的实现方式

要生成从起始日期到结束日期、间隔7天的日期列表,核心是每次在当前日期的基础上加上7天,直到超过结束日期。这里给你两种实现方式:

方式一:用while循环(修复你的原代码)

from datetime import date, timedelta

# 起始日期
sdate = date(1990, 10, 25)
# 结束日期
edate = date(2022, 12, 31)
# 间隔天数
interval = 7

rqd_dt = []
current_date = sdate

while current_date <= edate:
    rqd_dt.append(current_date)
    # 关键:在当前日期基础上加间隔天数
    current_date += timedelta(days=interval)

print(len(rqd_dt))
# 也可以打印列表看看结果
# print(rqd_dt)

方式二:用生成器(更简洁高效)

如果数据量很大,用生成器可以节省内存:

from datetime import date, timedelta

def generate_weekly_dates(start_date, end_date):
    current = start_date
    while current <= end_date:
        yield current
        current += timedelta(days=7)

# 使用生成器
sdate = date(1990, 10, 25)
edate = date(2022, 12, 31)
weekly_dates = list(generate_weekly_dates(sdate, edate))

print(len(weekly_dates))

补充说明

  • 注意循环条件用current_date <= edate,这样结束日期如果刚好是间隔后的日期,也会被包含进去;如果不想包含结束日期,就改成current_date < edate。
  • 两种方式都能正确生成你需要的日期列表,修复后的while循环版本解决了原代码的死循环问题,能正常输出列表长度。

内容的提问来源于stack exchange,提问作者parth pratim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:37:35