日付範囲をループするにはどうすればいいですか? 質問する

日付範囲をループするにはどうすればいいですか? 質問する

ひどい for ループ/カウンタータイプのソリューションを使用せずにこれを行う方法さえわかりません。問題は次のとおりです。

開始日と終了日の 2 つの日付が与えられており、指定された間隔で何らかのアクションを実行する必要があります。たとえば、2009 年 3 月 10 日から 2009 年 3 月 26 日までの 3 日ごとに、リストにエントリを作成する必要があります。入力は次のようになります。

DateTime StartDate = "3/10/2009";
DateTime EndDate = "3/26/2009";
int DayInterval = 3;

出力は次の日付のリストになります。

2009年3月13日 2009年3月16日 2009年3月19日 2009年3月22日 2009年3月25日

では、一体どうやってこのようなことをするのでしょうか? 次のように、別のカウンターを使用して範囲内の各日を反復処理する for ループを使用することを考えました。

int count = 0;

for(int i = 0; i < n; i++)
{
     count++;
     if(count >= DayInterval)
     {
          //take action
          count = 0;
     }

}

しかし、もっと良い方法があるように思えますか?

ベストアンサー1

まあ、いずれにせよループする必要があります。私は次のようなメソッドを定義することを好みます:

public IEnumerable<DateTime> EachDay(DateTime from, DateTime thru)
{
    for(var day = from.Date; day.Date <= thru.Date; day = day.AddDays(1))
        yield return day;
}

次のように使用できます:

foreach (DateTime day in EachDay(StartDate, EndDate))
    // print it or whatever

この方法では、1 日おき、3 日おき、平日のみなど、さまざまな条件を指定できます。たとえば、「開始」日から 3 日おきに返すには、AddDays(3)ループ内で の代わりにを呼び出すだけですAddDays(1)

おすすめ記事