2010-03-09 7 views
27

일반적으로 아래 코드를 사용하지만 더 좋은 방법이 있습니까?.NET의 월 마지막 날

lastOfMonth = new DateTime(Now.Year, Now.Month, 1).AddMonths(1).AddDays(-1) 
+3

"더 좋음"을 정의하십시오. –

+0

API가 제공하는 함수 만 더 나은 일을한다고 생각합니다. –

+1

특정 시간을 원하십니까? 그렇지 않다면, 오늘이 아니라 오늘을 사용해야합니다. –

답변

49

나는 그것을 만들면서

DateTime now = DateTime.Today; 
var lastDate = new DateTime(now.Year, now.Month, DateTime.DaysInMonth(now.Year, now.Month)); 
8
DateTime(year, month, DateTime.DaysInMonth(year, month)). 
3

당신은 CultureInfo.CurrentCulture.Calendar.GetDaysInMonth (Now.Year, Now.Month)

12

아마 DaysInMonth을 사용을 사용할 수 있습니다 사용 코드는 좀 더 읽기 쉽고 이해하기 쉽습니다 (비록 내가 당신의 트릭을 정말 좋아합니다 :-)). 이 입력 비슷한 액수를 (꽤 많은 인) requieres, 그래서 아마 확장 메서드를 정의 할 :

DateTime LastDayOfMonth(this DateTime) { 
    var days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); 
    return new DateTime(DateTime.Now.Year, DateTime.Now.Month, days); 
} 

이제 우리는 훨씬 더 :-) 보이는 DateTime.Now.LastDayOfMonth()을 사용할 수 있습니다.

int days = CalendarSystem.Iso.GetDaysInMonth(year, month); 

은 매우 간단, 어 : 여기

2

Noda Time를 사용하여 월의 일 수를 얻을 수있는 방법인가? 글쎄, 당신이 물어 보는 년과 달을 알고 있다고 가정합니다. 당신은 현재개월 위해 그것을 원하고 시스템의 시간대에, 당신은 다음과 같이 명시 적으로 지정할 필요가있는 경우 :

DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault(); 
LocalDate localDate = SystemClock.Instance.Now.InZone(tz).Date; 
int days = localDate.Calendar.GetDaysInMonth(localDate.Year, localDate.Month); 
노다 시간이 의도적으로 당신이 대신에, 이러한 것들에 대해 생각하게

그냥 DateTime.Now 또는 DateTime.Today이라는 가정을합니다.