我有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 :(得分:6)
AddDays
不会更改日期,但会返回添加了天数的新日期。因此,要更改endDate
,必须将函数的输出分配给它:
var endDate = new DateTime(2016, 8, 30);
endDate = endDate.AddDays(1);
答案 1 :(得分:0)
它返回一个结果,你必须指定为DateTime是一个结构并且是不可变的。此外,如果您签出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。
答案 2 :(得分: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);