Как я циклично выполняюсь через диапазон дат?

Вы могли уговорить своего администратора сети на установку домена для Вас (скажите 'evilpuppetmaster.hell'), и наличие подстановочного знака там так, чтобы все (*.evilpuppetmaster.hell') решило к Вашему IP

180
задан onekidney 4 December 2009 в 05:13
поделиться

7 ответов

Ну, вам нужно будет перебрать их так или иначе. Я предпочитаю определять такой метод:

public IEnumerable<DateTime> EachDay(DateTime from, DateTime thru)
{
    for(var day = from.Date; day.Date <= thru.Date; day = day.AddDays(1))
        yield return day;
}

Затем вы можете использовать его так:

foreach (DateTime day in EachDay(StartDate, EndDate))
    // print it or whatever

Таким образом, вы можете нажимать через день, каждый третий день, только в будние дни и т. Д. Например, чтобы возвращать каждый третий день, начиная с с "начальной" датой вы можете просто вызвать AddDays (3) в цикле вместо AddDays (1) .

437
ответ дан 23 November 2019 в 06:11
поделиться

Вместо этого вы можете подумать о написании итератора, который позволяет использовать обычный синтаксис цикла for, например, ++. Я поискал и нашел аналогичный вопрос , ответивший здесь, в StackOverflow, который дает указатели на то, как сделать DateTime итерируемым.

1
ответ дан 23 November 2019 в 06:11
поделиться

Вы можете использовать функцию DateTime.AddDays () , чтобы добавить свой DayInterval к StartDate и убедиться, что оно меньше EndDate .

1
ответ дан 23 November 2019 в 06:11
поделиться
DateTime startDate = new DateTime(2009, 3, 10);
DateTime stopDate = new DateTime(2009, 3, 26);
int interval = 3;

while ((startDate = startDate.AddDays(interval)) <= stopDate)
{
    // do your thing
}
3
ответ дан 23 November 2019 в 06:11
поделиться
DateTime startDate = new DateTime(2009, 3, 10);
DateTime stopDate = new DateTime(2009, 3, 26);
int interval = 3;

for (DateTime dateTime=startDate;
     dateTime < stopDate; 
     dateTime += TimeSpan.FromDays(interval))
{

}
7
ответ дан 23 November 2019 в 06:11
поделиться

Для вашего примера вы можете попробовать

DateTime StartDate = new DateTime(2009, 3, 10);
DateTime EndDate = new DateTime(2009, 3, 26);
int DayInterval = 3;

List<DateTime> dateList = new List<DateTime>();
while (StartDate.AddDays(DayInterval) <= EndDate)
{
   StartDate = StartDate.AddDays(DayInterval);
   dateList.Add(StartDate);
}
20
ответ дан 23 November 2019 в 06:11
поделиться

У меня есть класс Range в MiscUtil , который может вам пригодиться. В сочетании с различными методами расширения вы можете:

foreach (DateTime date in StartDate.To(EndDate).ExcludeEnd()
                                   .Step(DayInterval.Days())
{
    // Do something with the date
}

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

Это в основном готовый ( и более общего назначения) форма решения Маквандера.

28
ответ дан 23 November 2019 в 06:11
поделиться
Другие вопросы по тегам:

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