Сравнение общего списка даты и времени в C#

#c#

#c#

Вопрос:

У меня есть общий список дат и времени

 List<DateTime> **PreviousDates** = //Some List of Dates
 

Теперь я хочу получить все даты в списке PreviousDates, месяц и год которых равны месяцу и году данной даты. независимо от того, какой день и время…

Я попытался использовать список.Содержит метод (), но он проверяет все части даты, я хочу проверить только месяц и год..

Помогите мне!

Спасибо, Прадип

Ответ №1:

Вы можете создавать DateTime значения для начала и конца интервала:

 DateTime start = new DateTime(GivenDate.Year, GivenDate.Month, 1);
DateTime end = start.AddMonths(1);
 

Теперь вы можете легко выбирать элементы, которые находятся внутри интервала:

 List<DateTime> inside =
  PreviousDates
  .Where(d => d >= start amp;amp; d < end)
  .ToList();
 

(Вы, конечно, могли бы сравнить значения GivenDate.Year и GivenDate.Month с d.Year и d.Month в Where , но это более сложное и менее эффективное условие.)

Комментарии:

1. Я думаю, что это сложнее понять, поскольку в нем явно не указано его назначение. Кроме того, крошечная ошибка, это должно быть addMonth s .

2. @Joey: Спасибо, исправил ошибку. Я понимаю, что вы можете считать это немного более сложным, чем нужно, но гораздо более гибким. Если вместо этого вы хотите получить даты, охватывающие два или три месяца, это очень просто с помощью этого кода, но это становится намного сложнее, если вы сравниваете значения года и месяца.

Ответ №2:

Вам нужно использовать метод Where . Он отфильтрует список, и вы сможете сравнить год и месяц с текущей датой.

 DateTime currentDate = DateTime.Now;
var filteredDates = previousDates.Where(
    d => d.Year == currentDate.Year amp;amp; d.Month == currentDate.Month);
 

Комментарии:

1. Не требуется . Есть много других способов сделать это.

Ответ №3:

Вы могли бы использовать LINQ для возврата IEnumerable

 PreviousDates.Where(d => d.Month == month amp;amp; d.Year == year);
 

Комментарии:

1. Отсутствует конечная скобка и точка с запятой

Ответ №4:

Вы можете попробовать что-то вроде

 DateTime criteria = DateTime.Today;
List<DateTime> filtered = previousDates.Where(dt => dt.Month == criteria.Month amp;amp; dt.Year == criteria.Year).ToList();
 

Комментарии:

1. Не используйте DateTime.Today непосредственно в запросе. Он может измениться на полпути запроса, что даст вам действительно странный результат. Сохраните его в переменной и используйте переменную в запросе.

Ответ №5:

 previousDates.Where(d => d.Month == refDate.Month amp;amp; d.Year == refDate.Year);