为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据开始和结束获取for循环中的日期列表?

如何根据开始和结束获取for循环中的日期列表?

白衣非少年 2023-04-25 16:05:14
我想使用 for 循环获取开始日期和结束日期之间范围的唯一 yyyy-mm-01 列表。这是我的代码:import datetimefrom datetime import timedelta, datestart=date(2017,4,1)end=(datetime.date.today().replace(day=1)) - datetime.timedelta(days=1) #last completed monthdef 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-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-04-012017-05-01我尝试添加 set() 但它仍然显示冗余日期。我该如何解决?
查看完整描述

4 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

dates = set()

for single_date in daterange(start, end):

    dates.add(single_date.strftime("%Y-%m-01"))


print(sorted(list(dates)))


查看完整回答
反对 回复 2023-04-25
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

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)


查看完整回答
反对 回复 2023-04-25
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

问题是你实际上并没有使用你的集合来检查你之前是否见过一个日期:


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)


查看完整回答
反对 回复 2023-04-25
?
慕斯709654

TA贡献1840条经验 获得超5个赞

我强烈建议您使用dateutils模块来获取这样的重复日期。您可以使用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']


查看完整回答
反对 回复 2023-04-25
  • 4 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信