Подтвердить что ты не робот

Как получить все даты в данном месяце в С#

Я хочу сделать функцию, которая занимает месяц и год, и возвращает List<DateTime>, заполненную всеми датами в этом месяце.

любая помощь будет оценена

Спасибо в Advance

4b9b3361

Ответ 1

Здесь решение с 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-loop вы хотели бы реализовать iterator. В обоих случаях возвращаемый тип должен быть изменен на IEnumerable<DateTime>.

Ответ 2

Пример для версий Pre-Linq Framework с использованием в феврале 1999 года.

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);

Ответ 3

Я уверен, что могут быть лучшие способы сделать это. Но вы можете использовать это:

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: Если это домашнее задание, отметьте его "домашним заданием"!