如何循环遍历日期范围?

14 浏览
0 Comments

如何循环遍历日期范围?

我甚至不确定如何在不使用一些可怕的for循环/计数器类型解决方案的情况下完成这个问题。 这是问题:

我有两个日期,一个开始日期和一个结束日期,在指定的间隔内我需要采取一些行动。 例如: 对于从3/10/2009到3/26/2009每三天的每一天,我需要在列表中创建一个条目。 因此,我的输入将是:

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

但是似乎有更好的方法?

admin 更改状态以发布 2023年5月22日
0
0 Comments

我有一个在MiscUtil中的Range类,你可能会觉得它有用。结合各种扩展方法,你可以做:

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

(你可能想要排除结束 - 我只是提供它作为示例。)

这基本上是一个现成的(且更通用)mquander解决方案。

0
0 Comments

你需要以某种方式循环遍历它们。我喜欢定义一个这样的方法:

public IEnumerable 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)

0