C# 在日期、小时和分钟之间迭代

C# 在日期、小时和分钟之间迭代,c#,datetime,C#,Datetime,我尝试在作为输入接收的两个日期之间迭代,并每5分钟打印一次(在工作时间内) 似乎我正在进入一个无休止的阶段,可以在结束时停止我的应用程序 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.AddDay

我尝试在作为输入接收的两个日期之间迭代,并每5分钟打印一次(在工作时间内)

似乎我正在进入一个无休止的阶段,可以在结束时停止我的应用程序

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);
        }
     }
 }
DateTime startDate=新日期时间(2018,1,1);
DateTime endDate=新的日期时间(2018,3,1);
//月日
对于(DateTime date=startDate;date17小时)
继续;
//每分钟迭代一次

对于(var min=date;min而言,您可能过于复杂了;请查看以下内容:

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);
}
var startDate=新日期时间(2018,1,1);
var endDate=新的日期时间(2018年3月1日);
而((startDate=startDate.AddMinutes(5))17||
startDate.DayOfWeek==星期六
startDate.DayOfWeek==DayOfWeek.Sunday)
继续;
Console.WriteLine({0:ddd,MMM-dd,yyyy-HH:mm}),startDate);
}
您只需要一个循环,递增5分钟,直到满足
endDate
;在循环中,您跳过所有不需要的值(周末和非工作时间)


在这段代码中,我将重新使用
startDate
作为工作变量,但您肯定可以创建一个新的变量,让事情变得更清楚。

也许您过于复杂了;请查看以下内容:

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);
}
var startDate=新日期时间(2018,1,1);
var endDate=新的日期时间(2018年3月1日);
而((startDate=startDate.AddMinutes(5))17||
startDate.DayOfWeek==星期六
startDate.DayOfWeek==DayOfWeek.Sunday)
继续;
Console.WriteLine({0:ddd,MMM-dd,yyyy-HH:mm}),startDate);
}
您只需要一个循环,递增5分钟,直到满足
endDate
;在循环中,您跳过所有不需要的值(周末和非工作时间)

在这段代码中,我将重新使用
startDate
作为工作变量,但你肯定可以创建一个新的变量,让事情变得更清楚。

hour
永远不会是错误的。时间点总是发生在它的第二天之前……除非你是海因林的《所有僵尸》中的一个角色…hour
决不能为假。时间点总是早于它的第二天发生…除非你是海因莱因的《所有僵尸》中的角色。。。