一尘不染

如何遍历日期范围?

c#

我什至不知道如何在不使用某些可怕的循环/计数器类型解决方案的情况下做到这一点。这是问题所在:

给了我两个日期,一个开始日期和一个结束日期,在指定的时间间隔内,我需要采取一些措施。例如:对于2009年3月3日至2009年3月26日之间的每个日期,我需要在列表中创建一个条目。所以我的输入是:

DateTime StartDate = "3/10/2009";
DateTime EndDate = "3/26/2009";
int DayInterval = 3;

而我的输出将是具有以下日期的列表:

3/13/2009 3/16/2009 3/19/2009 3/22/2009 3/25/2009

那么,我该怎么做这样的事情呢?我考虑过使用一个for循环,该循环将在范围内的每一天之间使用一个单独的计数器进行迭代,如下所示:

int count = 0;

for(int i = 0; i < n; i++)
{
     count++;
     if(count >= DayInterval)
     {
          //take action
          count = 0;
     }

}

但是似乎还有更好的方法?


阅读 464

收藏
2020-05-19

共1个答案

一尘不染

好吧,您需要以一种或另一种方式遍历它们。我更喜欢定义这样的方法:

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)

2020-05-19