перебор между датами, часами и минутами - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь перебрать 2 полученные даты в качестве входных данных и печатать каждые 5 минут (в рабочее время)

Похоже, я нахожусь в бесконечности и могу остановить мое приложение в endTime

DateTime startDate = new DateTime(2018, 1, 1);
DateTime endDate = new DateTime(2018, 3, 1);   

// day in month
for (DateTime date = startDate; date < endDate; date = date.AddDays(1))
{
    if (date.DayOfWeek == DayOfWeek.Friday || date.DayOfWeek == DayOfWeek.Saturday)
        continue;

    //iterate every hour
    for (var hour = date; hour < hour.AddDays(1); hour = hour.AddHours(1))
    {
        if (hour.Hour < 8 || hour.Hour > 17)
            continue;

        //iterate every minute
        for (var min = date; min <= min.AddDays(1); min = min.AddMinutes(5))
        {
            Console.WriteLine(min);
        }
     }
 }

1 Ответ

0 голосов
/ 17 февраля 2019

Может быть, вы слишком усложняете;взгляните на это:

var startDate = new DateTime(2018, 1, 1);
var endDate = new DateTime(2018, 3, 1);
while ((startDate = startDate.AddMinutes(5)) < endDate)
{
    if (startDate.Hour < 8 || startDate.Hour > 17 ||
        startDate.DayOfWeek == DayOfWeek.Saturday || 
        startDate.DayOfWeek == DayOfWeek.Sunday)
        continue;

    Console.WriteLine("{0:ddd, MMM dd, yyyy HH:mm}", startDate);
}

Вам просто нужен цикл, увеличивающийся на 5 минут до достижения endDate;внутри цикла вы пропускаете все значения, которые вам не нужны (выходные и нерабочие часы).

В этом коде я повторно использую startDate в качестве рабочей переменной, но вы определенно можете создать новую.и прояснить ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...