python - 将 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 中做到这一点?
解决方案
将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)]
推荐阅读
- c# - 具有 AAD 组策略的 Blazor 服务器项目
- git - 当您可以通过合并绕过保护时,GitLab 中受保护的分支的目的是什么?
- javascript - ParcelJS 捆绑错误 - favicon.ico:无效版本:未定义
- python - 在 MySQL 查询中使用 python 函数
- r - 如何快速轻松地为新的 R 版本更新所有包?
- python-3.x - Docker selenium:无头模式下的 Chrome 超时
- android - GeoFire removeAllListeners() 方法根本不删除监听器
- html - body 元素的初始高度
- javascript - 如何将 QuerySet 从 python 传递给 js?
- algorithm - 哪种排序和唯一顺序更快?