2010-03-09 24 views
27

Normalde aşağıdaki kodu kullanıyorum ama daha iyi bir yolu var mı?Ayın son günü. NET

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

"Daha iyi" yi tanımlayın. –

+0

Sadece API tarafından sağlanan bir işlevin daha iyi bir iş yapacağını düşünüyorum. –

+1

Belirli bir saat mi istiyorsunuz? Eğer değilse, Bugün, şimdi kullanmalısınız. –

cevap

49

Ben yapar gibi

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

Sen CultureInfo.CurrentCulture.Calendar.GetDaysInMonth (Now.Year, Now.Month)

12

Herhalde DaysInMonth kullanacağı kullanabilirsiniz kullanmak kod biraz daha okunaklı ve anlaşılması kolay (her ne kadar ben gerçekten hile :-) gibi). Bu yazım benzer bir kestirmeniz (oldukça çok olan) requieres yüzden muhtemelen bir uzantısı yöntemi tanımlarsınız:

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

Şimdi çok daha iyi :-) görünüyor DateTime.Now.LastDayOfMonth() kullanabilirsiniz.

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

Oldukça basit, eh: Burada

2

Eğer Noda Time kullanarak aydaki gün sayısını elde edebilirsiniz nasıl? Peki, sorduğun yılı ve ayı bildiğini varsayar. Eğer akım ay için bunu istiyorum ve sistemin saat diliminde, o zaman bu gibi açıkça belirtmek gerekirse:

DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault(); 
LocalDate localDate = SystemClock.Instance.Now.InZone(tz).Date; 
int days = localDate.Calendar.GetDaysInMonth(localDate.Year, localDate.Month); 
Noda Zaman kasten sen yerine, bu şeyler hakkında düşündürüyor

Sadece DateTime.Now veya DateTime.Today'un yaptığı varsayımları yapmak.

İlgili konular