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

Система tables/views из самого сервера (SYSCAT.TABLES, dbo.sysindexes, ALL_TABLES, information_schema.columns, и т.д.) является почти всегда множественным числом. Я предполагаю ради непротиворечивости, я последовал бы их примеру.

19
задан Binary Worrier 29 July 2009 в 09:59
поделиться

4 ответа

static IEnumerable<DateTime> AllDatesBetween(DateTime start, DateTime end)
{
    for(var day = start.Date; day <= end; day = day.AddDays(1))
        yield return day;
}

Редактировать: Добавлен код для решения вашего конкретного примера и демонстрации использования:

var calculatedDates = 
    new List<string>
    (
        AllDatesBetween
        (
            DateTime.Parse("2009-07-27"),
            DateTime.Parse("2009-07-29")
        ).Select(d => d.ToString("yyyy-MM-dd"))
    );
37
ответ дан 30 November 2019 в 02:52
поделиться

Вам просто нужно выполнить итерацию от начала до конца, вы можете сделать это в цикле for

DateTime start = DateTime.Parse(startDate);
DateTime end = DateTime.Parse(endDate);

for(DateTime counter = start; counter <= end; counter = counter.AddDays(1))
{
    calculatedDates.Add(counter);
}
5
ответ дан 30 November 2019 в 02:52
поделиться

Проще всего взять дату начала и добавить к ней 1 день ( используя AddDays), пока не дойдете до конечной даты. Примерно так:

DateTime calcDate = start.Date;
while (calcDate <= end)
{
    calcDate = calcDate.AddDays(1);
    calculatedDates.Add(calcDate.ToString());
}

Очевидно, вы должны настроить условное выражение while и положение вызова AddDays в зависимости от того, хотите ли вы включить в коллекцию даты начала и окончания.

[Edit: Кстати, вам следует подумать об использовании TryParse () вместо Parse () в случае, если переданные строки плохо конвертируются в даты]

3
ответ дан 30 November 2019 в 02:52
поделиться
for( DateTime i = start; i <= end; i = i.AddDays( 1 ) )
{
    Console.WriteLine(i.ToShortDateString());
}
1
ответ дан 30 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: