Python如何按指定天数间隔在起止日期之间正确循环遍历
问题根因
你当前代码按1天递增的核心原因是range函数默认步长为1,变量x每次只加1,最终生成的相邻日期间隔自然为1天,不符合你指定固定间隔的需求。
解决方案
方案1:while循环实现(逻辑更直观,适配边界场景)
推荐优先用这种写法,可读性和容错性更高:
from datetime import datetime, timedelta # 提前解析好起始日期,避免重复计算 start_date = datetime.strptime("2021-07-31 07:30:00", "%Y-%m-%d %H:%M:%S") # 你的结束日期转换逻辑保持不变 _endDate = datetime.strptime(_ruccerenceList[0], "%Y-%m-%d") # 取间隔天数 step_days = int(_ruccerenceList[2]) current_date = start_date while current_date <= _endDate: # 此处写你自己的业务逻辑,比如格式化输出日期 print(current_date.strftime("%Y-%m-%d")) # 按固定步长累加日期 current_date += timedelta(days=step_days)
方案2:修正range生成器写法
如果要保持生成器的写法,需要给range指定第三个步长参数,同时调整区间边界适配左闭右开的特性:
start_date = datetime.strptime(date, "%Y-%m-%d %H:%M:%S") step_days = int(_ruccerenceList[2]) # 计算起始到结束的总间隔天数 total_days = (_endDate - start_date).days # range参数:起始偏移量、最大偏移量、步进值 date_array = (start_date + timedelta(days=x) for x in range(0, total_days + 1, step_days)) for date_object in date_array: print(date_object.strftime("%Y-%m-%d"))
注意事项
由于你转换后的_endDate时分秒默认为00:00:00,如果起始日期带的时分秒大于0,刚好落在结束日期当天的时间会被判为大于_endDate被排除。如果需要不管时分秒都包含结束日期当天,可以将判断条件改为只比对日期部分:
while current_date.date() <= _endDate.date():
内容的提问来源于stack exchange,提问作者mausasu1234
相关产品推荐
相关产品推荐

