J'ai le code suivant pour le faire, mais comment puis-je l'améliorer ? Pour l'instant, je pense que c'est mieux que des boucles imbriquées, mais ça commence à devenir Perl-one-linerish quand on a un générateur dans une compréhension de liste.
day_count = (end_date - start_date).days + 1
for single_date in [d for d in (start_date + timedelta(n) for n in range(day_count)) if d <= end_date]:
print strftime("%Y-%m-%d", single_date.timetuple())
Notes
- Je ne l'utilise pas vraiment pour imprimer. C'est juste pour la démonstration.
- El
start_date
yend_date
Les variables sontdatetime.date
car je n'ai pas besoin de l'horodatage. (Ils vont être utilisés pour générer un rapport).
Exemple de sortie
Pour une date de début de 2009-05-30
et une date de fin de validité de 2009-06-09
:
2009-05-30
2009-05-31
2009-06-01
2009-06-02
2009-06-03
2009-06-04
2009-06-05
2009-06-06
2009-06-07
2009-06-08
2009-06-09
3 votes
Juste pour préciser : Je ne pense pas qu'il y ait de différence entre 'time.strftime("%Y-%m-%d", single_date.timetuple())' et le plus court 'single_date.strftime("%Y-%m-%d")'. La plupart des réponses semblent copier le style le plus long.
11 votes
Wow, ces réponses sont beaucoup trop compliquées. Essaie ça : stackoverflow.com/questions/7274267/
0 votes
@GringoSuave : qu'est-ce qui est compliqué dans La réponse de Sean Cavanagh ?
0 votes
Application : tricher sur les streaks de GitHub : stackoverflow.com/questions/20099235/
0 votes
@GringoSuave Ce lien est un duplicata de : stackoverflow.com/questions/1060279/
1 votes
Duplicata ou pas, vous obtiendrez une réponse plus simple sur l'autre page.
0 votes
Ça fait plus de 10 ans. Je pense qu'il est bon que les gens arrêtent d'en rajouter... -- OP
0 votes
Cela répond-il à votre question ? Création d'une plage de dates en Python