如果不使用一些可怕的循环/计数器类型解决方案,我什至不确定如何做到这一点。这是问题所在:
我有两个日期,一个开始日期和一个结束日期,我需要在指定的时间间隔内采取一些行动。例如:对于从 2009 年 3 月 10 日到 2009 年 3 月 26 日的第三天之间的每个日期,我需要在列表中创建一个条目。所以我的输入是:
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).
AddDays(3)
AddDays(1)