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