1. ホーム
  2. c#

[解決済み】日付範囲をループする方法は?

2022-04-05 15:38:15

質問

私は、恐ろしいforループ/カウンタタイプのソリューションを使用せずにこれを行う方法についてさえ分からないのです。 問題は以下の通りです。

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

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

で、出力は次のような日付を持つリストとなります。

3/13/2009 3/16/2009 3/19/2009 3/22/2009 3/25/2009

では、一体どうすればこのようなことができるのでしょうか?私は、このような別のカウンターを持つ範囲内のすべての日の間で繰り返し実行するループを使用することを考えました。

int count = 0;

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

}

でも、もっといい方法がありそうな気がするのですが?

解決方法は?

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

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

このようにして、一日おき、三日おき、平日のみ、などをヒットさせることができる。 たとえば、quot;start" の日付から3日おきに返すには、次のように呼び出すだけです。 AddDays(3) の代わりにループ内で AddDays(1) .