python 日期范围列表元素

python date range list elements

我想做范围(开始,结束)。我有几天,ex


    start date -  end date
    -----------------------
    2015-05-17 - 2015-05-25
    2015-06-10 - 2015-06-20
    -----------------------

    startdate = [datetime.date(2015, 5, 17), datetime.date(2015, 6, 10)]
    enddate = [datetime.date(2015, 5, 25), datetime.date(2015, 6, 20)]

i need range startdate and enddate 

need_days = startdate[i] - enddate[i]
1. datetime.date(2015, 5, 25) - datetime.date(2015, 5, 17)
2. atetime.date(2015, 6, 20), datetime.date(2015, 6, 10)

after i want range separate
result
------------
2015-05-17
2015-05-18
2015-05-19
2015-05-20
2015-05-21
2015-05-22
2015-05-23
2015-05-24
2015-05-25

result
----------
2015-06-10
2015-06-11
2015-06-12
2015-06-13
2015-06-14
2015-06-15
2015-06-16
2015-06-17
2015-06-18
2015-06-19
2015-06-20

我怎样才能做到这一点?请帮助我,在此先感谢。

您可以在 timedelta 中使用范围,在 (end-start).days+1) 中获取天数。

from datetime import datetime,timedelta
start,end = datetime(2015, 5, 17), datetime(2015, 5, 25)
dates = [start + timedelta(days=i) for i in range((end-start).days+1)]
for dte in dates:
    print(dte.date())

2015-05-17
2015-05-18
2015-05-19
2015-05-20
2015-05-21
2015-05-22
2015-05-23
2015-05-24
2015-05-25

第二个范围的逻辑完全相同。

start,end = datetime(2015, 6, 10), datetime(2015, 6, 20)
dates = [start + timedelta(days=i) for i in range((end-start).days+1)]
for dte in dates:
    print(dte.date())

2015-06-10
2015-06-11
2015-06-12
2015-06-13
2015-06-14
2015-06-15
2015-06-16
2015-06-17
2015-06-18
2015-06-19
2015-06-20

如果必须使用这两个列表,请使用 zip:

from datetime import date,timedelta
start_dates = [date(2015, 5, 17), date(2015, 6, 10)]
end_dates = [date(2015, 5, 25), date(2015, 6, 20)]
dates = [start + timedelta(days=i) for start, end in zip(start_dates,end_dates) for i in range((end-start).days+1) ]
for dte in dates:
    print(dte)

输出:

2015-05-17
2015-05-18
2015-05-19
2015-05-20
2015-05-21
2015-05-22
2015-05-23
2015-05-24
2015-05-25
2015-06-10
2015-06-11
2015-06-12
2015-06-13
2015-06-14
2015-06-15
2015-06-16
2015-06-17
2015-06-18
2015-06-19
2015-06-20