web-dev-qa-db-fra.com

Imprimer toutes les dates entre deux dates

Par exemple:

from datetime import date

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

Je cherche un code simple pour imprimer toutes les dates entre les deux:

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

Merci

149
zetah

Je suis venu avec ceci:

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)

Le résultat:

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

Votre question demande des dates intermédiaires, mais je crois que vous vouliez inclure les points de début et de fin, ils sont donc inclus. Pour supprimer la date de fin, supprimez le "+ 1" à la fin de la fonction de plage. Pour supprimer la date de début, insérez un argument de 1 au début de la fonction de plage.

271
Gringo Suave

En utilisant une liste de compréhension:

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)
30
Hugo Rodger-Brown

Identique à la réponse de Gringo Suave, mais avec un générateur:

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)

Ensuite, vous pouvez l'utiliser comme suit:

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)]

Ou comme ceci:

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
8
cieplak
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()
6
ine
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)
2
develerx