2016-08-30 6 views
0

나는 dateTime 변수가 있습니다. 날짜가 날짜의 마지막 날이 아니지만 마지막 날의 하루 전에 있으면 하루를 추가하고 싶습니다. 내가 그 실행이 endDate.AddDays(1);하지만 endDate에가는 볼 수 있습니다 디버거에서날짜를 날짜 시간으로 추가

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); 

여전히 AddDays 기능이 작동하지 않는 경우와 동일 (30.08.2016)입니다. 아무도 이유가 무엇인지 압니까?

+0

그것은 당신이 날짜 시간이 구조체이며 불변으로 할당해야 결과를 반환

여기에 코드의 업데이트 된 작품입니다. '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 - ya :) –

+0

타이핑이 것을 다시 생각해보십시오. 모든 달에 31 일간이있는 것은 아닙니다. – ThePerplexedOne

0

. 또한 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 씩 증가합니다.

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); 
관련 문제