2016-08-30 157 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);