web-dev-qa-db-ja.com

C#で特定の月のすべての日付を取得する方法

月と年をとり、List<DateTime>を今月のすべての日付で埋めた関数を作成したいと思います。

どんな助けでもありがたいです

前もって感謝します

33

LINQを使用したソリューションは次のとおりです。

_public static List<DateTime> GetDates(int year, int month)
{
   return Enumerable.Range(1, DateTime.DaysInMonth(year, month))  // Days: 1, 2 ... 31 etc.
                    .Select(day => new DateTime(year, month, day)) // Map each day to a date
                    .ToList(); // Load dates into a list
}
_

そしてforループを持つもの:

_public static List<DateTime> GetDates(int year, int month)
{
   var dates = new List<DateTime>();

   // Loop from the first day of the month until we hit the next month, moving forward a day at a time
   for (var date = new DateTime(year, month, 1); date.Month == month; date = date.AddDays(1))
   {
      dates.Add(date);       
   }

   return dates;
}
_

_List<DateTime>_の代わりに日付のストリーミングシーケンスを返すことを検討することをお勧めします。これにより、呼び出し元が日付をリストまたは配列にロードするか、後処理するか、部分的に反復するかなどを決定できます。LINQバージョンでは、 ToList()の呼び出しを削除することでこれを実現できます。 forループの場合、 iterator を実装する必要があります。どちらの場合も、戻り値の型を_IEnumerable<DateTime>_に変更する必要があります。

76
Ani

1999年2月を使用した、Linqフレームワーク以前のバージョンのサンプル。

int year = 1999;
int month = 2;

List<DateTime> list = new List<DateTime>();
DateTime date = new DateTime(year, month, 1);

do
{
  list.Add(date);
  date = date.AddDays(1);
while (date.Month == month);
5
Steve Townsend

これを行うにはもっと良い方法があると思います。しかし、あなたはこれを使うことができます:

public List<DateTime> getAllDates(int year, int month)
{
    var ret = new List<DateTime>();
    for (int i=1; i<=DateTime.DaysInMonth(year,month); i++) {
        ret.Add(new DateTime(year, month, i));
    }
    return ret;
}
4

どうぞ:

    public List<DateTime> AllDatesInAMonth(int month, int year)
    {
        var firstOftargetMonth = new DateTime(year, month, 1);
        var firstOfNextMonth = firstOftargetMonth.AddMonths(1);

        var allDates = new List<DateTime>();

        for (DateTime date = firstOftargetMonth; date < firstOfNextMonth; date = date.AddDays(1) )
        {
            allDates.Add(date);
        }

        return allDates;
    }

希望する月の最初の日付から翌月の最初の日付よりも短い最後の日付までの日付を反復します。

PS:これが宿題の場合は、「宿題」のタグを付けてください!

0
Lunivore