10

私は2つの期間の間の週の各日をループしようとしています

  DateTime start = new DateTime(2010, 1, 1);
  DateTime end = new DateTime(2011, 12, 12);

次のコードを使用して、これらの日付の間の日数を取得することができました

     TimeSpan range = (end - start);

710であることが判明しました。

私は今、毎月、DAYS OFTHEWEEKを取得しようとしています。

例えば

1月123 4 5 6 7 8 9 10 11 12 13 14 15 16171 181920。。。

マッチングで

MTWTFSSMTWTFSSM

私はc#がDateTimeクラスDayOfWeekのプロパティを持っていることを理解しています。これは、私の問題が上記を実行するためのループを構築している曜日を取得しますか?

誰でも?

4

3 に答える 3

21

これにより、開始日から終了日までのすべての日がループされ、それぞれの曜日が取得されます。

DateTime startDate = new DateTime(2010, 1, 1);
DateTime endDate = new DateTime(2011, 12, 12);
for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
{
    DayOfWeek dw = date.DayOfWeek;
    // ...
}

あなたが本当に最適化について心配していない限り、私はこれ以上複雑なことはしません。

于 2010-04-21T14:34:54.247 に答える
3

私は次のことが好きです:

static IEnumerable Days(DateTime start, DateTime end)
{
    while (start < end)
    {
        string day = start.ToString("ddd");

        start = start.AddDays(1);

        yield return day;
    }
}

それの使い方:

foreach(string s in Days(new DateTime(2010, 1, 1), new DateTime(2010, 2, 1)))
{
    Console.WriteLine(s);
}

もちろん、さまざまなタイプを返すように変更できます。

于 2010-04-21T14:44:23.883 に答える
3

LINQ の使用:

DateTime start = new DateTime(2010, 1, 1);
DateTime end = new DateTime(2011, 12, 12);
int days = (end  - start).Days;

Enumerable
    .Range(0, days)
    .Select(x => start.AddDays(x))
    .ToList()
    .ForEach(d =>
    {
        DayOfWeek dayOfWeek = d.DayOfWeek;
        // do what you want
    });
于 2010-04-21T16:17:17.080 に答える