2016-08-30 154 views
0

我有dateTime變量,如果日期不是月份的最後一天,而是最後一天,我想添加一天。添加日期至日期時間

endDate = newDate(2016, 8, 30);//create date for test 
if (DateTime.DaysInMonth(endDate.Year, endDate.Month) == (int)31 && endDate.Day == (int)30) 
    endDate.AddDays(1); 

從調試器,我可以看到執行的推移endDate.AddDays(1);endDate仍然是相同的(30.08.2016)彷彿AddDays功能不起作用。 有人知道爲什麼嗎?

+0

它返回你必須分配作爲一個DateTime是一個struct和不可改變的結果。 'endDate = endDate.AddDays(1);'同樣如果你簽出[文檔](https://msdn.microsoft.com/en-us/library/system.datetime.adddays(v = vs.110))。 aspx),你會看到該方法返回一個DateTime實例。 – Igor

+0

缺少在enddate中分配更新的日期返回 –

+0

謝謝,我的錯誤。我錯過了文檔。我主要與其他語言工作,其中類似的功能在相同的變量上運行,並自動記住這一點。 – Simon

回答

4

AddDays不會更改日期,但會返回一個新日期並添加天數。因此,對於endDate改變你必須在函數的輸出分配給它:

var endDate = new DateTime(2016, 8, 30); 
endDate = endDate.AddDays(1); 
+0

@JamesThorpe - 亞:)打字 –

+0

可能想重新考慮這一點。並非所有月份都有31天。 – ThePerplexedOne

0

它返回你必須分配作爲一個DateTime是一個struct和不可改變的結果。另外,如果您簽出the documentation,您將看到該方法返回一個DateTime實例。

endDate = endDate.AddDays(1); 

關於你的邏輯,你想1日起,以增加它如果這個月的最後一天的前一天。你現在有什麼是錯誤的,可以更好地寫成這樣:

// only increment if one day before last day of month 
if ((DateTime.DaysInMonth(endDate.Year, endDate.Month) - 1) == endDate.Day) 
    endDate = endDate.AddDays(1); // assign the returned value 

從最後一天的拍攝效果和減去1月份的最後一天之前得到的一天。如果這相當於你的日期當月的當天,然後遞增1。

0

並非所有月份都有31天。

下面是更新後的代碼:

var endDate = new DateTime(2017, 2, 27);//create date for test 
    var daysInMonth = DateTime.DaysInMonth(endDate.Year, endDate.Month); 
    if(endDate.Day == daysInMonth - 1) 
     endDate = endDate.AddDays(1);