2012-03-05 81 views
1

我正在寻找一个C#解决方案,它将允许我在日期后向后迭代。 从当前日期或提供的日期开始,我想循环使用日期,每次在循环中减去一天,持续给定的天数。它当然应该能够检测到月份发生变化或闰年等,并以MM-DD-YYYY格式返回日期。C#迭代向日期

+0

只是要仔细检查 - 你在循环中做什么,或者你只是在寻找一个日期减法函数? – Paddy 2012-03-05 13:54:44

+0

我想在循环中为每一天/日期做一些事情,我倒数。 – Baxter 2012-03-05 14:04:28

回答

5

应该是很容易:

var givenNumberOfDays = 30; 
for(DateTime day = DateTime.Now; day > DateTime.Now.AddDays(-givenNumberOfDays); day = day.AddDays(-1)) 
{ 
    //perform your logic here 
    var dateInCorrectFormat = day.ToString("MM-dd-yyyy"); 
} 
+0

这看起来棒极了!谢谢。 – Baxter 2012-03-05 14:38:22

1

这将backwords迭代:

class Program 
{ 
    static void Main(string[] args) 
    { 

     DateTime myDate = DateTime.Now; 

     for (int i = 0; i < 10; i++) 
     { 
      Console.WriteLine(myDate.AddDays(-i).ToString("MM-dd-yyyy")); 
     } 


    } 
} 
+1

为什么在myDate单独足够时引入两个“循环变量”myDate和i? – 2012-03-05 13:56:44

+0

我个人认为这比将它们全部插入'for()'括号更可读。 – 4imble 2012-03-05 14:14:54

0

可以使用DateAdd函数,可以让您添加或减去的时间间隔向/从日期和返回结果日期。 在你的情况下,间隔是“d”(天)。 请参阅here

2
public IEnumerable<DateTime> Dates(int nDays) 
{ 
    DateTime dt = DateTime.Now; 
    yield return dt; 
    for(int i=0;i<nDays-1;i++) 
    { 
     dt = dt.AddDays(-1); 
     yield return dt; 
    } 

} 

foreach (var dt in Dates(10)) 
{ 
    Console.WriteLine(dt.ToString("MM-dd-yyyy")); 
}