如何在Python中的两个日期之间迭代数月?
在本文中,我们将讨论如何使用Python在两个日期之间迭代几个月。
我们可以使用timedelta和rrule方法在两个日期之间迭代几个月。
方法一:使用timedelta迭代
timedelta() 用于计算日期的差异,也可用于Python中的日期操作
例子:
但是使用 timedelta 我们不能完美地在日期之间迭代几个月,因为这里我们每个月添加 31 天。但是每个月都不会有确切的 31 天。有些月份有 30 甚至 28、29。为了解决问题,rrule 采取了有助于在特定时间段内在日期之间进行迭代的行为。
代码
Python3
# import necessary packages
from datetime import datetime, timedelta
# date initialisation
startDate = datetime(2020, 1, 10)
endDate = datetime(2020, 4, 20)
# stores 31 days that can be added
addDays = timedelta(days=31)
while startDate <= endDate:
print(startDate)
# add a month
startDate += addDays
Python3
# import necessary packages
from datetime import datetime
from dateutil import rrule
# dates
start_date = datetime(2021, 1, 1)
end_date = datetime(2022, 1, 1)
for dt in rrule.rrule(rrule.MONTHLY, dtstart=start_date, until=end_date):
print(dt)
Python3
# import necessary packages
from datetime import datetime
from dateutil import rrule
# dates
start_date = datetime(2021, 1, 1)
end_date = datetime(2022, 1, 1)
for dt in rrule.rrule(rrule.YEARLY, dtstart=start_date, until=end_date):
print(dt)
输出
2020-01-10 00:00:00
2020-02-10 00:00:00
2020-03-12 00:00:00
2020-04-12 00:00:00
方法二:规则
rrule 是 dateutil 库中的一个包,该包包含一个方法也是rrule ,它以 dtstart、直到和特定时间段作为参数,分别是开始日期、结束日期和基于迭代的时间段。具体时间段是每周、每月、每年等。
注意:当您想要在日期之间迭代几个月时,请使用 MONTHLY。
句法:
rrule(rrule.MONTHLY, dtstart=start_date, until=end_date)
例子:
使用rrule在日期之间迭代数月。
Python3
# import necessary packages
from datetime import datetime
from dateutil import rrule
# dates
start_date = datetime(2021, 1, 1)
end_date = datetime(2022, 1, 1)
for dt in rrule.rrule(rrule.MONTHLY, dtstart=start_date, until=end_date):
print(dt)
输出
2021-01-01 00:00:00
2021-02-01 00:00:00
2021-03-01 00:00:00
2021-04-01 00:00:00
2021-05-01 00:00:00
2021-06-01 00:00:00
2021-07-01 00:00:00
2021-08-01 00:00:00
2021-09-01 00:00:00
2021-10-01 00:00:00
2021-11-01 00:00:00
2021-12-01 00:00:00
2022-01-01 00:00:00
例子:
使用 rrule 在日期之间迭代数年。
Python3
# import necessary packages
from datetime import datetime
from dateutil import rrule
# dates
start_date = datetime(2021, 1, 1)
end_date = datetime(2022, 1, 1)
for dt in rrule.rrule(rrule.YEARLY, dtstart=start_date, until=end_date):
print(dt)
输出
2021-01-01 00:00:00
2022-01-01 00:00:00