ちょっと前に同じような感じのネタを。。
したような気がするのだが、まぉおいておこう。。
素のPython3で、日付にてfor文を回す方法
日付で分割して処理をしたいと思うときがあります。
例えば、2022/04/23から、2022/06/1までの日付を3日毎に、処理したいとかが考えられます。
思ったより面倒で、なんとなくdateutilでやりたくなりますが、ライブラリを導入できないとします。
date_range関数
で、いろいろを参考に書いてみたのが以下です。
from datetime import date, timedelta def date_range(start, stop, step = timedelta(1)): current = start while current <= stop: yield current current += step if current < stop + step: yield stop # 呼び出しサンプル print("timedelta=3"); start_date = date(2021,12,21) end_date = date(2022,3,2) for i, dt in enumerate(date_range(start_date, end_date, timedelta(3)): print(dt.strftime("%Y-%m-%d"))
動作結果は以下になります。
timedelta=3 2021-12-21 2021-12-24 2021-12-27 2021-12-30 2022-01-02 2022-01-05 2022-01-08 2022-01-11 2022-01-14 2022-01-17 2022-01-20 2022-01-23 2022-01-26 2022-01-29 2022-02-01 2022-02-04 2022-02-07 2022-02-10 2022-02-13 2022-02-16 2022-02-19 2022-02-22 2022-02-25 2022-02-28 2022-03-02
書いておいてなんですが、よく分かってない。
いまだにyieldってよく分かってません。もちろんループでちょいちょい戻るのは分かるのですが、どこで使っていいかを判断する基準が分かってません。
まぁ動くからいいことにしよう。。
参考
https://stackoverflow.com/questions/7274267/print-all-day-dates-between-two-dates/7274316