Skip to main content
 首页 » 编程设计

python之如何在 Python 中将日期范围划分为月份

2025年05月04日14leader

我有以下日期范围:

begin: 2018-02-15 
end: 2018-04-23 

我想实现以下目标:

["2018-02-15 - 2018-02-28", "2018-03-01 - 2018-03-31", "2018-04-01 - 2018-04-23"] 

本质上,我想将给定的日期范围划分为月份。我想不出在 Python 中完成此操作的方法。

我考虑过解决方案here , 但是,这会根据指定的时间间隔拆分日期范围。我希望能够动态拆分日期范围。

因此,给定从 2018 年 2 月 15 日到 2018 年 4 月 23 日的日期范围,我希望能够获得该范围内的各个月份,如下所示:

  • 2018年2月15日至2018年2月28日
  • 2018 年 3 月 1 日至 2018 年 3 月 31 日
  • 2018年4月1日至2018年4月23日

请您参考如下方法:

在循环中;从第一天开始,不断增加一天,直到到达结束日期;每当月份更改时保存日期。

import datetime 
begin = '2018-02-15' 
end = '2018-04-23' 
 
dt_start = datetime.datetime.strptime(begin, '%Y-%m-%d') 
dt_end = datetime.datetime.strptime(end, '%Y-%m-%d') 
one_day = datetime.timedelta(1) 
start_dates = [dt_start] 
end_dates = [] 
today = dt_start 
while today <= dt_end: 
    #print(today) 
    tomorrow = today + one_day 
    if tomorrow.month != today.month: 
        start_dates.append(tomorrow) 
        end_dates.append(today) 
    today = tomorrow 
 
end_dates.append(dt_end) 
 
 
out_fmt = '%d %B %Y' 
for start, end in zip(start_dates,end_dates): 
    print('{} to {}'.format(start.strftime(out_fmt), end.strftime(out_fmt))) 

结果:

>>> 
15 February 2018 to 28 February 2018 
01 March 2018 to 31 March 2018 
01 April 2018 to 23 April 2018 
>>> 

您可能想出一种方法来获取开始日期和结束日期之间的月份范围;为每个月份的第一天创建一个日期时间对象,存储它们和它们之前的日子。不过跨越年份变化的日期可能会有问题。