Tôi có đoạn mã sau để làm điều này, nhưng làm thế nào tôi có thể làm nó tốt hơn? Ngay bây giờ tôi nghĩ rằng nó tốt hơn các vòng lặp lồng nhau, nhưng nó bắt đầu nhận được Perl-one-linerish khi bạn có một trình tạo trong danh sách hiểu.
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())
Ghi chú
- Tôi thực sự không sử dụng điều này để in. Đó chỉ là mục đích demo.
- Các biến
start_date
vàend_date
làdatetime.date
các đối tượng vì tôi không cần dấu thời gian. (Chúng sẽ được sử dụng để tạo báo cáo).
Đầu ra mẫu
Đối với ngày bắt đầu 2009-05-30
và ngày kết thúc 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