首页 > 解决方案 > 将 2 个日期之间的天数拆分为 30 或 31 个批次,并在每种情况下返回开始日期

问题描述

我想在两个提到的日期之间获取每个月的开始日期。

就像开始日期21st jan 2020和结束日期一样,30 oct 2020 我希望输出采用以下格式:

21 Jan 2020
31 jan 2020
1st feb 2020
28 feb 2020
1st march 2020
31st march 2020
.
.
.
.
1 st oct 2020
30 th oct 2020

我们如何在 python 中做到这一点?

标签: pythondatetime

解决方案


dateutil 模块的 rrule子模块用于任何类型的日期/时间重复。

from dateutil import rrule, parser
start = parser.parse('Jan 21 2020')
end   = parser.parse('Oct 30 2020')
date_list = [start]
date_list.extend(list(rrule.rrule(rrule.MONTHLY, bymonthday=(-1,1), dtstart=start, until=end)))
date_list.append(end)
print(date_list)

输出-

[datetime.datetime(2020, 1, 21, 0, 0), datetime.datetime(2020, 1, 31, 0, 0), datetime.datetime(2020, 2, 1, 0, 0), datetime.datetime(2020, 2, 29, 0, 0), datetime.datetime(2020, 3, 1, 0, 0), datetime.datetime(2020, 3, 31, 0, 0), datetime.datetime(2020, 4, 1, 0, 0), datetime.datetime(2020, 4, 30, 0, 0), datetime.datetime(2020, 5, 1, 0, 0), datetime.datetime(2020, 5, 31, 0, 0), datetime.datetime(2020, 6, 1, 0, 0), datetime.datetime(2020, 6, 30, 0, 0), datetime.datetime(2020, 7, 1, 0, 0), datetime.datetime(2020, 7, 31, 0, 0), datetime.datetime(2020, 8, 1, 0, 0), datetime.datetime(2020, 8, 31, 0, 0), datetime.datetime(2020, 9, 1, 0, 0), datetime.datetime(2020, 9, 30, 0, 0), datetime.datetime(2020, 10, 1, 0, 0), datetime.datetime(2020, 10, 30, 0, 0)]

推荐阅读