2010-03-09 15 views
27

Normalerweise benutze ich den folgenden Code, aber gibt es einen besseren Weg?Letzter Tag des Monats in .NET

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

Definieren Sie "besser". –

+0

Ich denke, nur eine Funktion, die von der API bereitgestellt wird, würde einen besseren Job machen. –

+1

Möchten Sie eine bestimmte Zeit? Wenn nicht, sollten Sie heute, nicht jetzt verwenden. –

Antwort

49

Ich benutze

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

Sie können CultureInfo.CurrentCulture.Calendar.GetDaysInMonth (Now.Year, Now.Month)

12

ich wahrscheinlich DaysInMonth verwenden würde verwenden, da es macht der Code ist etwas lesbarer und leichter zu verstehen (obwohl ich deinen Trick wirklich mag :-)). Dieses requieres eine ähnliche ammount der Eingabe (das ist eine ganze Menge), so würde ich wahrscheinlich eine Verlängerung Methode definieren:

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

Jetzt können wir DateTime.Now.LastDayOfMonth() verwenden, die viel besser :-) aussieht.

2

Hier ist, wie Sie die Anzahl der Tage im Monat bekommen können Noda Time mit:

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

Ziemlich einfach, nicht wahr? Nun, das setzt voraus, dass du das Jahr und den Monat kennst, nach dem du fragst. Wenn Sie wollen, dass es für den aktuellen Monat und in der Zeitzone des Systems, dann müssen Sie das explizit angeben, wie folgt aus:

DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault(); 
LocalDate localDate = SystemClock.Instance.Now.InZone(tz).Date; 
int days = localDate.Calendar.GetDaysInMonth(localDate.Year, localDate.Month); 

Noda Zeit absichtlich macht Sie über diese Dinge denken, statt nur die Annahmen machen, die DateTime.Now oder DateTime.Today tun.

Verwandte Themen