[英]How to get list of dates in for loop based on start and end?
I want to get a list of unique yyyy-mm-01 for a range between a start and end date using a for loop.我想使用 for 循环获取开始日期和结束日期之间范围的唯一 yyyy-mm-01 列表。 This is the code I have:
这是我的代码:
import datetime
from datetime import timedelta, date
start=date(2017,4,1)
end=(datetime.date.today().replace(day=1)) - datetime.timedelta(days=1) #last completed month
def daterange(start, end):
for n in range(int((end - start).days)):
yield start + timedelta(n)
for single_date in daterange(start, end):
myset = str(single_date.strftime("%Y-%m-01"))
print(myset)
The issue is that my result looks like this:
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-04-01
2017-05-01
I tried adding set() but it still shows the redundant dates.我尝试添加 set() 但它仍然显示多余的日期。 How do I solve for that?
我该如何解决?
dates = set()
for single_date in daterange(start, end):
dates.add(single_date.strftime("%Y-%m-01"))
print(sorted(list(dates)))
The issue is you aren't actually making use of your set to check if you've seen a date before:问题是您实际上并没有使用您的设置来检查您是否看过之前的日期:
myset = set()
for single_date in daterange(start, end):
mydate = str(single_date.strftime("%Y-%m-01"))
if mydate not in myset:
print(mydate)
myset.add(mydate)
import datetime
from datetime import timedelta, date
from dateutil.relativedelta import relativedelta
start=date(2017,4,1)
end=(datetime.date.today().replace(day=1)) - datetime.timedelta(days=1) #last completed month
lst = []
current_date = start
while current_date < end:
current_date = current_date.replace(day=1) + relativedelta(months=1)
lst.append(current_date)
print(lst)
I strongly suggest you to use dateutils
module for obtaining recurring dates like this.我强烈建议您使用
dateutils
模块来获取这样的重复日期。 You can install it using the cmd pip install python-dateutil
您可以使用 cmd
pip install python-dateutil
安装它
>>> from dateutil.rrule import rrule, MONTHLY
>>>
>>> start=date(2017,4,1)
>>> end=(datetime.date.today().replace(day=1)) - datetime.timedelta(days=1)
>>> res = list(d.strftime("%Y-%m-%d") for d in rrule(dtstart=start, until=end, freq=MONTHLY))
>>> pprint(res)
['2017-04-01',
'2017-05-01',
'2017-06-01',
'2017-07-01',
'2017-08-01',
'2017-09-01',
'2017-10-01',
'2017-11-01',
'2017-12-01',
'2018-01-01',
'2018-02-01',
'2018-03-01',
'2018-04-01',
'2018-05-01',
'2018-06-01',
'2018-07-01',
'2018-08-01',
'2018-09-01',
'2018-10-01',
'2018-11-01',
'2018-12-01',
'2019-01-01',
'2019-02-01',
'2019-03-01',
'2019-04-01',
'2019-05-01',
'2019-06-01',
'2019-07-01',
'2019-08-01',
'2019-09-01',
'2019-10-01',
'2019-11-01',
'2019-12-01',
'2020-01-01',
'2020-02-01',
'2020-03-01',
'2020-04-01',
'2020-05-01',
'2020-06-01',
'2020-07-01']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.