如何用Python生成每月首日与末日的日期列表
问题分析与解决方案
原代码存在几个关键问题:
- 重复导入
datetime模块,冗余且易混淆 - 使用固定的
30.9天计算月份首尾日期,不符合实际月份天数(如1月31天、2月28/29天等),导致日期计算错误 - 函数返回结构冗余,增加后续解析成本
- 循环中日期更新逻辑错误,易出现日期偏移
修正后的代码
import datetime def get_month_start_end(start_date): # 传入的start_date已为每月首日,直接作为当月起始 month_start = start_date # 计算下月首日:处理12月跨年情况 if month_start.month == 12: next_month_start = datetime.date(month_start.year + 1, 1, 1) else: next_month_start = datetime.date(month_start.year, month_start.month + 1, 1) # 当月末日 = 下月首日减1天,适配所有月份天数 month_end = next_month_start - datetime.timedelta(days=1) return month_start.strftime("%Y-%m-%d"), month_end.strftime("%Y-%m-%d") # 设定起始日期与当前日期 start_date = datetime.date(2023, 1, 1) today = datetime.date.today() current_month_start = start_date while current_month_start <= today: start_str, end_str = get_month_start_end(current_month_start) print(start_str, end_str) # 跳转到下月首日,进入下一轮循环 if current_month_start.month == 12: current_month_start = datetime.date(current_month_start.year + 1, 1, 1) else: current_month_start = datetime.date(current_month_start.year, current_month_start.month + 1, 1)
代码说明
- 日期计算逻辑:通过「下月首日减1天」获取当月末日,彻底规避手动计算每月天数的误差,完美适配平年/闰年的所有月份
- 循环控制:每次循环后直接跳转至下月首日,确保遍历的每个起始点都是准确的月份第一天
- 输出优化:直接返回格式化后的日期字符串,无需额外解析嵌套结构,简化输出流程
内容的提问来源于stack exchange,提问作者melik
相关产品推荐
相关产品推荐

