Печать всех дат между двумя датами

Например:

from datetime import date

d1 = date(2008,8,15)
d2 = date(2008,9,15)

Я ищу простой код для печати всех дат между:

2008,8,15  
2008,8,16  
2008,8,17  
...  
2008,9,14  
2008,9,15

Спасибо

Ответ 1

Я придумал это:

from datetime import date, timedelta

sdate = date(2008, 8, 15)   # start date
edate = date(2008, 9, 15)   # end date

delta = edate - sdate       # as timedelta

for i in range(delta.days + 1):
    day = sdate + timedelta(days=i)
    print(day)

Выход:

2008-08-15
2008-08-16
...
2008-09-13
2008-09-14
2008-09-15

Ваш вопрос требует промежуточных дат, но я считаю, что вы имели в виду начальную и конечную точки, поэтому они включены. Чтобы удалить дату окончания, удалите "+ 1" в конце функции диапазона. Чтобы удалить дату начала, вставьте 1 аргумент в начало функции диапазона.

Ответ 2

Использование понимания списка:

from datetime import date, timedelta

d1 = date(2008,8,15)
d2 = date(2008,9,15)

# this will give you a list containing all of the dates
dd = [d1 + timedelta(days=x) for x in range((d2-d1).days + 1)]

for d in dd:
    print d

# you can't join dates, so if you want to use join, you need to
# cast to a string in the list comprehension:
ddd = [str(d1 + timedelta(days=x)) for x in range((d2-d1).days + 1)]
# now you can join
print "\n".join(ddd)

Ответ 3

По существу то же самое, что и ответ Gringo Suave, но с генератором:

from datetime import datetime, timedelta


def datetime_range(start=None, end=None):
    span = end - start
    for i in xrange(span.days + 1):
        yield start + timedelta(days=i)

Затем вы можете использовать его следующим образом:

In: list(datetime_range(start=datetime(2014, 1, 1), end=datetime(2014, 1, 5)))
Out: 
[datetime.datetime(2014, 1, 1, 0, 0),
 datetime.datetime(2014, 1, 2, 0, 0),
 datetime.datetime(2014, 1, 3, 0, 0),
 datetime.datetime(2014, 1, 4, 0, 0),
 datetime.datetime(2014, 1, 5, 0, 0)]

Или вот так:

In []: for date in datetime_range(start=datetime(2014, 1, 1), end=datetime(2014, 1, 5)):
   ...:     print date
   ...:     
2014-01-01 00:00:00
2014-01-02 00:00:00
2014-01-03 00:00:00
2014-01-04 00:00:00
2014-01-05 00:00:00

Ответ 4

import datetime

d1 = datetime.date(2008,8,15)
d2 = datetime.date(2008,9,15)
diff = d2 - d1
for i in range(diff.days + 1):
    print (d1 + datetime.timedelta(i)).isoformat()

Ответ 5

import datetime

begin = datetime.date(2008, 8, 15)
end = datetime.date(2008, 9, 15)

next_day = begin
while True:
    if next_day > end:
        break
    print next_day
    next_day += datetime.timedelta(days=1)