Примечание: этот ответ предполагает, что вы заинтересованы в «естественных» неделях, что на самом деле не заботится о годе. Например, 31 декабря 2015 года был четверг, а 1 января 2016 года была пятница - на мой взгляд (и используя алгоритм в этом ответе), которые считались бы на той же неделе ... понедельник до/в оба дня в конце концов.
Простейшим решением для этого, вероятно, является группировка «начало недели», а затем берет последнее значение в каждой группе. Найти начало недели немного неудобно, и лучше всего делать в вспомогательный метод:
var latestPerWeek = dates.GroupBy(StartOfWeek)
.Select(g => g.Max())
.ToList();
...
private static DateTime StartOfWeek(DateTime date)
{
date = date.Date; // Just remove any time parts...
// 0=Sunday, 1=Monday... 6=Saturday
int sundayToSaturdayDayOfWeek = (int) date.DayOfWeek;
// 0=Monday, 1=Tuesday... 6=Sunday
int mondayToSundayDayOfWeek = ((sundayToSaturdayDayOfWeek - 1) + 7) % 7;
return date.AddDays(-mondayToSundayDayOfWeek);
}
Обратите внимание, что .NET «неделя года» обработки заманчиво использовать, но в основном не обрабатывает этот сценарий. В Нода Time 2.0 это будет намного проще, но это пока не доступно ...
Что считаете ли вы «неделю»? С понедельника по воскресенье? С воскресенья по субботу? Что-то другое? –
С понедельника по воскресенье –
Другими словами, вам нужно в конце каждой недели возвращаться? –