2013-04-24 89 views
4

我有一段時間,我想通過它並在每個日期執行相同的代碼。C#:DateTime - 經過一段時間?

開始結束日期時間格式,每月至少

while (!(begin.Equals(end))) 
     { 
      ...some code here...    
      begin = begin.AddDays(1); 
     } 
  1. 我不知道的區別,如果它會自動升級,月值的時候,天數值到達一個確切的月份(在確切的一年)結束 - 例如二月並不總是有相同的天數,所以...

  2. 是否有更好/更短/更好的方法將日期增加一天?例如 例如:begin.Day++;或者這個:begin++;

我不習慣C#,所以很抱歉問這個蹩腳的問題,並提前感謝您的任何答案。

+1

是什麼阻止了你自己嘗試? – MarcinJuraszek 2013-04-24 08:08:15

+0

我沒有完成內部代碼,我喜歡嘗試一切,當我有我想要的代碼的所有部分,即使這意味着我可能在第一部分中有一些問題..我很愚蠢,我知道。如果不知道他們是否會好或不好,我可以有更多的線路:| (沒有錯誤和警告就足夠我開始:D) – 2013-04-24 08:13:30

回答

5

1)是的。所有日期的算術處理都是正確的。

2)是的。你可以這樣做:

var oneDay = TimeSpan.FromDays(1); 
... 
begin += oneDay; 

你可能還使用了for循環:

var oneDay = TimeSpan.FromDays(1); 

for (DateTime currentDay = begin; currentDay < end; currentDay += oneDay) 
{ 
    // Some code here. 
} 

的最後一件事:如果你想一定要忽略時間組件,可以保證一部分時間開始日期和結束日期設置爲午夜如下:

begin = begin.Date; 
end = end.Date; 

確保您的邊界正確。循環會在currentDay < end - 但您可能需要currentDay <= end如果您的時間範圍是包容性的而不是排他性的。

0

你發佈的代碼是正確的,應該可以正常工作。別擔心,AddDays method會在需要時自動增加月份和年份。

您還可以,如果你覺得它更具可讀性使用for循環:

for (DateTime date = startDate; date < endDate; date = date.AddDays(1)) 
{ 
    // Your code here 
} 
+0

這將無法正常工作。日期是不可變的,AddDays返回一個新的實例 – adrianm 2013-04-24 08:11:05

+0

@adrianm感謝您的反饋。我已經錯過了for循環聲明結尾處的賦值部分的確。現在已經糾正了。 – 2013-04-24 08:16:20

2

做這種方式(不比較平等,因爲時間可能是不同的,環路將會永存)。

while (begin <= end) 
    { 
     ...some code here...    
     begin = begin.AddDays(1); 
    } 
+0

+1,我打算提出相同的觀點......你打敗了我! – series0ne 2013-04-24 08:08:39

+0

我根本沒有考慮時間,因爲我只在那裏設定日期,所以謝謝你的意見。 – 2013-04-24 08:17:47

0

你可以試試這個,我認爲這是一個小更簡潔:

while (DateTime.Compare(begin, end) < 0) 
{ 
    /* Some code here */ 
    begin = begin.AddDays(1); 
} 

DateTime對象知道如何增加月,年等中的,所以你不用擔心關於那個。

相關問題