user829174
user829174

Reputation: 6362

iterating between dates, hours and minutes

I am trying to iterate between 2 dates received as inputs and print every 5 minutes (during working hours)

Seems like I am getting to an endless and can get my app stop at 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);
        }
     }
 }

Upvotes: 0

Views: 298

Answers (1)

Rubens Farias
Rubens Farias

Reputation: 57936

Maybe you're overcomplicating; take a look into this:

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);
}

You just need a loop, incrementing by 5 minutes until the endDate is met; inside the loop you skip all values you don't want (weekends and non-business hours).

In this code I'm reusing the startDate as work variable, but you definitely could create a new one and make things clearer.

Upvotes: 4

Related Questions