Python实现两日期间按月递增+同月逐日递增的日期生成
生成指定日期序列的解决方案
需求说明
给定起始日期 startdate = '2022-1-1'、结束日期 enddate = '2022-9-15',需要生成如下日期序列:
2022-2-1
2022-3-1
2022-4-1
2022-5-1
2022-6-1
2022-7-1
2022-8-1
2022-9-1
2022-9-2
...
2022-9-14
即先输出两日期之间每个月的1号,再在最后一个月内逐日输出到结束日期的前一天。
现有代码问题
当前代码仅能实现按月递增生成每月1号,但无法在同一循环中处理最后一个月的逐日递增,输出仅到2022-8-1:
from dateutil.relativedelta import relativedelta from datetime import datetime start_Date = datetime(2022, 1, 1) endDate = datetime(2022, 9, 15) tdelta = relativedelta(months=+1) while start_Date <= endDate: print(start_Date) start_Date += tdelta
解决方案代码
通过在循环中判断当前日期的下一个月是否超出结束日期,切换递增方式(月度/逐日),实现需求:
from dateutil.relativedelta import relativedelta from datetime import datetime, timedelta start_Date = datetime(2022, 1, 1) endDate = datetime(2022, 9, 15) current_date = start_Date while current_date < endDate: next_month_date = current_date + relativedelta(months=1) # 如果下一个月1号仍在结束日期范围内,继续按月生成 if next_month_date <= endDate: print(next_month_date.strftime('%Y-%m-%d')) current_date = next_month_date else: # 进入最后一个月,逐日生成到结束日期前一天 current_date += timedelta(days=1) if current_date < endDate: print(current_date.strftime('%Y-%m-%d'))
代码逻辑说明
- 初始化
current_date为起始日期,循环条件设为current_date < endDate,避免包含结束日期本身。 - 计算当前日期的下一个月1号:
next_month_date。 - 若
next_month_date未超过结束日期,打印该日期并将current_date更新为next_month_date,继续月度递增。 - 当
next_month_date超过结束日期时,切换为逐日递增:每次给current_date加1天,打印日期直到current_date达到结束日期前一天。
内容的提问来源于stack exchange,提问作者david01
相关产品推荐
相关产品推荐

