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

Python中跨多年月按2天增量遍历日期的优化方案咨询

优雅实现Python按2天增量遍历跨年月日历日期

需求回顾

需要按2天增量循环遍历指定年月范围的日历日期(支持单月、多月、多年多月份),每次迭代调用main(client, start_date, end_date),确保无重复日期,原实现代码冗余繁琐,需优化。

原代码问题分析

  1. 硬编码月份天数:手动维护days_in_month字典,未考虑闰年2月的29天情况,存在逻辑漏洞。
  2. 冗余分支逻辑:针对月份天数奇偶性拆分分支,重复编写main调用和结果收集代码,维护成本高。
  3. 硬编码判断值:如while end_day <=32这类不合理的硬编码,易引发日期越界错误。
  4. 低效的结果收集:通过循环逐个append记录,不如直接用extend高效。

优化方案代码

from datetime import date, timedelta

# 配置遍历范围
years = [2021, 2022]
months = list(range(1, 13))  # 等价于[1,2,...,12]
clients = ["client1", "client2"]

combined_records = []

for client in clients:
    for target_year in years:
        for target_month in months:
            # 确定当月起始和结束日期
            current_month_start = date(target_year, target_month, 1)
            # 计算下个月第一天,用于推导当月最后一天
            if target_month == 12:
                next_month_start = date(target_year + 1, 1, 1)
            else:
                next_month_start = date(target_year, target_month + 1, 1)
            current_month_end = next_month_start - timedelta(days=1)
            
            current_start = current_month_start
            while current_start <= current_month_end:
                # 计算当前区间的结束日期,不超过当月最后一天
                current_end = current_start + timedelta(days=1)
                if current_end > current_month_end:
                    current_end = current_start  # 当月最后一天单独作为一个区间
                
                # 调用main函数并收集结果
                list_of_records = main(client, current_start, current_end)
                combined_records.extend(list_of_records)
                
                # 按2天增量推进起始日期
                current_start += timedelta(days=2)
    print(f"CLIENT COMPLETE: {client}")

优化亮点

  1. 自动适配日期规则:通过next_month_start - timedelta(days=1)自动计算当月最后一天,完美处理闰年、不同月份天数差异,无需手动维护月份天数字典。
  2. 统一逻辑消除冗余:去掉奇偶月份分支,用一套逻辑处理所有月份,最后一天自动判断单独成组,代码简洁易维护。
  3. 安全的日期操作:直接使用date对象和timedelta进行日期增量,避免手动计算日期数字导致的越界错误。
  4. 高效的结果收集:用list.extend()替代循环append,减少内存操作,提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:25:19