2012-03-05 86 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")); 
}