c# - 如何遍历日期范围?

标签 c# asp.net datetime loops

如果不使用一些可怕的 for 循环/计数器类型解决方案,我什至不确定如何做到这一点。问题是:

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

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

我的输出将是一个包含以下日期的列表:

2009 年 3 月 13 日 2009 年 3 月 16 日 2009 年 3 月 19 日 2009 年 3 月 22 日 2009 年 3 月 25 日

那么我到底该怎么做呢?我想过使用一个 for 循环,它会在范围内的每一天之间迭代,并带有一个单独的计数器,如下所示:

int count = 0;

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

}

但似乎还有更好的方法?

最佳答案

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

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)

关于c# - 如何遍历日期范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847580/

相关文章:

mysql - 将从日期时间列中提取的时间与 MariaDB 和 MySQL 中的静态时间进行比较

c# - 以编程方式访问所有用户开始菜单

c# - .NET 进程的内存转储中存在大量无法解释的内存

jquery - 如何在 RadDatePicker 中实现清除按钮

asp.net - (405) 不允许的方法。 WCF网络服务

asp.net - 处理 EF4 中模型的默认值

mysql - 从销售查询中删除 00 :00:00. 000 MYSQL

c# - 抛出异常但保留堆栈跟踪

c# - Response.End() 异常;

c# - 设置 Azure Webjob 时区