Python实现获取两个指定日期间各月首日的循环遍历方法
需求场景
需要在两个选定的日期范围内循环遍历,仅提取范围内每个月的首日。
报错原因分析
Python标准库的datetime.timedelta仅支持周、天、小时、分钟等固定时长的时间单位,而月份的天数不固定(28~31天),不存在通用的标准月份时长,因此无法直接创建月份单位的timedelta对象,这就是修改delta为月份单位后触发报错的根本原因。
可行解决方案
你整理的方案逻辑是可行的,核心是通过总月份数换算实现跨月跳转,不需要依赖第三方库。如果需要确保输出包含起始月份的首日,可以调整打印顺序,优化后代码如下:
import datetime start_date = datetime.date(2020, 1, 1) end_date = datetime.date(2020, 4, 4) datenow = start_date while datenow <= end_date: # 先打印当前符合要求的月首日 print(datenow) # 计算下一个月的首日 total_months = datenow.year * 12 + datenow.month next_year, next_month = divmod(total_months, 12) datenow = datetime.date(next_year, next_month + 1, 1)
上述代码的输出结果为:
2020-01-01 2020-02-01 2020-03-01 2020-04-01
完全符合选定日期范围内取每月首日的需求,跨年场景也可以正常处理。
内容的提问来源于stack exchange,提问作者diedro
相关产品推荐
相关产品推荐

