2010-03-22 24 views
209

Wie kann ich den letzten Tag des Monats in C# finden?Wie bekomme ich den letzten Tag eines Monats?

Zum Beispiel, wenn ich das Datum 03/08/1980 habe, wie bekomme ich den letzten Tag des Monats 8 (in diesem Fall 31)?

+2

@Mark: Was kann ich fragen? Ihre eigene Antwort erfordert keine Erweiterungsmethode, denke ich. – abatishchev

+4

Der letzte Tag ist nicht nur für den Monat, Sie brauchen das Jahr auch. Der letzte Tag im Februar 2010 ist 28, aber der letzte Tag im Februar 2008 ist 29. – Guffa

+0

@abatishchev Es erfordert keine Erweiterungsmethode, aber die Frage fragt nicht wirklich danach. Es ist jedoch viel schöner und viel besser lesbar, zumindest für mich, um es zu sehen. Die Erweiterungsmethode war eher ein Vorschlag als alles andere. Jede Lösung würde in einer Erweiterungsmethode funktionieren, nicht nur in meiner. – Mark

Antwort

414

Der letzte Tag des Monats Sie wie diese zu erhalten, die 31 zurückgibt:

DateTime.DaysInMonth(1980, 08); 
+14

public static DateTime ConvertToLastDayOfMonth (DateTime-Datum) { Rückgabe neuer DateTime (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } , um den letzten Tag des Monats in einem Datumsformat zu erhalten – regisbsb

65
DateTime firstOfNextMonth = new DateTime(date.Year, date.Month, 1).AddMonths(1); 
DateTime lastOfThisMonth = firstOfNextMonth.AddDays(-1); 
+1

"Wie bekomme ich den letzten Tag eines Monats?". DateTime.DaysInMonth (Jahr, Monat) gibt zurück, wie viele Tage es im Monat gibt, dies wird die gleiche Antwort für "Was ist der letzte Tag des Monats" zurückgeben. Dein Weg funktioniert, aber ich denke, es ist zu viel Code für eine einfache Sache. – rochasdv

9

Substract pro Tag ab dem ersten des nächsten Monats:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month+1,1).AddDays(-1); 

auch, falls Sie es brauchen auch für den Monat Dezember zu arbeiten:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month,1).AddMonths(1).AddDays(-1); 
138
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month); 
+0

@Henk Eigentlich habe ich das von einem Platz in unserer Quelle gezogen, der die 'DateTime' von' lastDayOfMonth' erzeugt. Ehrlich gesagt funktioniert jeder Weg perfekt. Es ist ein pedantisches Argument, welcher Weg besser ist. Ich habe es in beide Richtungen getan und beide ergeben die gleiche Antwort. – Mark

+0

Marke, nein.Ihr Ergebnis ist ein 'int', meins eine' DateTime'. Es geht darum, wer von uns die Spezifikationen am besten gelesen (erraten) hat. –

1

I don‘ t wissen C# aber, wenn es sich herausstellt, gibt es keine bequeme API-Möglichkeit, um es zu bekommen, eine der Möglichkeiten, die Sie tun können, ist, indem Sie der Logik folgen:

today -> +1 month -> set day of month to 1 -> -1 day 

Natürlich nimmt das an, dass Sie date math von diesem Typ haben.

23

Wenn Sie das Datum, einen Monat und ein Jahr gegeben wollen, scheint dies zu Recht:

public static DateTime GetLastDayOfMonth(this DateTime dateTime) 
{ 
    return new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month)); 
} 
6

Sie können von diesem Code das letzte Datum eines jeden Monats finden:

var now = DateTime.Now; 
var startOfMonth = new DateTime(now.Year, now.Month, 1); 
var DaysInMonth = DateTime.DaysInMonth(now.Year, now.Month); 
var lastDay = new DateTime(now.Year, now.Month, DaysInMonth); 
8

Sie können den letzten Tag des Monats durch eine einzige Zeile Code finden:

int maxdt = (new DateTime(dtfrom.Year, dtfrom.Month, 1).AddMonths(1).AddDays(-1)).Day; 
+0

Es fragt mich, dass anstelle der einfachen Methode: 'DateTime.DaysInMonth', warum sollte jemand nach dieser unleserlichen und komplexen Weg, um es zu erreichen suchen !? - Aber als eine gültige Lösung ist akzeptabel;). –

3

Von DateTimePicker:

Erster Termin:

DateTime first_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, 1); 

Letztes Datum:

DateTime last_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, DateTime.DaysInMonth(DateTimePicker.Value.Year, DateTimePicker.Value.Month)); 
1

Um den letzten Tag eines Monats in einem bestimmten Kalender - und in einer Erweiterungsmethode - zu erhalten:

public static int DaysInMonthBy(this DateTime src, Calendar calendar) 
{ 
    var year = calendar.GetYear(src);     // year of src in your calendar 
    var month = calendar.GetMonth(src);     // month of src in your calendar 
    var lastDay = calendar.GetDaysInMonth(year, month); // days in month means last day of that month in your calendar 
    return lastDay; 
} 
Verwandte Themen