ひどい 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)
。