Python筛选未来10天日期并合并连续日期代码异常求助
问题排查与修正代码
先梳理你的代码存在的几个核心问题:
1. 缩进语法错误
start_date = None之后的end_date、list_upcoming定义以及后续循环都存在缩进层级错误,Python对缩进敏感,这会直接导致代码运行报错。
2. 日期比较的时分秒干扰
datetime.datetime.now()会包含时分秒信息,比如当前时间是2024-10-05 14:30:00,而你解析后的日期是2024-10-05 00:00:00,此时date >= today会判定为False,导致当天的日期被错误排除。应该把today和future_date都转换为date类型,只保留年月日部分。
3. 连续日期合并逻辑缺陷
- 遍历第一个日期时,仅设置了
end_date,未同步初始化start_date,导致后续逻辑混乱 - 遇到不连续日期时,只添加了单个
start_date,未正确处理之前的连续区间(如果起始和结束日期不同) - 最后收尾时,强制用
-连接所有剩余日期,无法区分单个日期和连续区间
修正后的代码
from datetime import datetime, timedelta def process_dates(data_list): """ 筛选未来10天日期的逻辑 -> 创建10天的timedelta,计算未来日期 -> 检查未来几天内是否有公共假日 """ list_upcoming_raw = [] ten_days = timedelta(days=10) # 转换为date类型,消除时分秒干扰 today = datetime.now().date() future_date = today + ten_days for date_str in data_list: date = datetime.strptime(date_str, '%y%m%d').date() if today <= date <= future_date: list_upcoming_raw.append(date) list_upcoming_raw.sort() list_upcoming = [] if not list_upcoming_raw: return list_upcoming # 初始化连续区间的起始与结束日期 start_date = list_upcoming_raw[0] end_date = list_upcoming_raw[0] for date in list_upcoming_raw[1:]: if date == end_date + timedelta(days=1): # 日期连续,更新结束日期 end_date = date else: # 日期不连续,添加之前的区间 if start_date == end_date: list_upcoming.append(start_date.strftime('%d.%m.%Y')) else: list_upcoming.append(f"{start_date.strftime('%d.%m.%Y')}-{end_date.strftime('%d.%m.%Y')}") # 重置区间起始与结束为当前日期 start_date = date end_date = date # 处理最后一组区间 if start_date == end_date: list_upcoming.append(start_date.strftime('%d.%m.%Y')) else: list_upcoming.append(f"{start_date.strftime('%d.%m.%Y')}-{end_date.strftime('%d.%m.%Y')}") return list_upcoming # 测试示例数据 data_list = [ "231002", "231003", "231004", "231005", "231006", "231009", "231010", "231011", "231012", "231013", "231030", "231031", "240223", "240328", "240329", "240401", "240402", "240403", "240404", "240405", "240501", "240508", "240509", "240510", "240520", "240521", "240620", "240621", "240624", "240625", "240626", "240312", "240313", "240314", "240315" ] print(process_dates(data_list))
关键修改说明
- 日期类型统一:将
today和future_date转换为date类型,避免时分秒对日期比较的干扰 - 缩进修正:调整变量定义和循环的缩进层级,确保Python语法正确
- 区间初始化优化:直接用第一个日期初始化
start_date和end_date,逻辑更直观 - 区间合并逻辑完善:每次遇到不连续日期时,根据起始和结束日期是否相同,决定添加单个日期还是区间;最后单独处理剩余的区间
- 空列表判断:添加空列表校验,避免索引越界错误
内容的提问来源于stack exchange,提问作者zlElo
相关产品推荐
相关产品推荐

