Как об этом:
public static void Main()
{
var start = DateTime.Now;
var saturdays = GetSaturdays(start, 13, 4).OrderBy(d => Math.Abs((start - d).Days));
foreach (var s in saturdays)
{
Console.WriteLine(s.ToLongDateString());
}
}
public static IEnumerable<DateTime> GetSaturdays(DateTime start, int weeksBack, int weeksForward)
{
var startingSat = start.AddDays(6 - (int)start.DayOfWeek);
for (int i = -weeksBack; i < weeksForward; i++)
{
yield return startingSat.AddDays(i * 7);
}
}
Ваш вопрос все еще немного неясно, как вы хотите их заказать, но вы можете изменить порядок, чтобы отразить бы то ни было вы хотите. Похоже, вы хотите, чтобы они заказали, насколько они близки к дате начала, что почти наверняка не имеет смысла. Если вы просто хотите, чтобы они отсортированы по дате по убыванию (это то, что вы должны были сказать, если это то, что вы на самом деле хотите) Тогда просто заменить OrderBy
с:
.OrderByDescending(d => d);
Вот fiddle
Так каков твой вопрос? Где у вас есть трудности? Вы посмотрели документацию MSDN для 'DateTime' и всех функций и свойств там? –
Кроме того, укажите * последнее *, поскольку вы проецируете 4 недели в будущее. –
отредактирован в отношении вышеуказанного – user3010406