@ Mark: Wofür darf ich fragen? Ihre eigene Antwort erfordert keine Erweiterungsmethode, denke ich.
Abatishchev
4
Der letzte Tag ist nicht nur für den Monat spezifisch, Sie benötigen auch das Jahr. Der letzte Tag im Februar 2010 ist 28, aber der letzte Tag im Februar 2008 ist 29.
Guffa
@abatishchev Es ist keine Erweiterungsmethode erforderlich , aber die Frage fragt nicht wirklich danach. Es ist jedoch viel schöner und viel lesbarer, zumindest für mich, es zu sehen. Die Erweiterungsmethode war mehr ein Vorschlag als alles andere. Jede Lösung würde in einer Erweiterungsmethode funktionieren, nicht nur in meiner.
Mark
Antworten:
653
Der letzte Tag des Monats, den Sie so erhalten, gibt 31 zurück:
public static DateTime ConvertToLastDayOfMonth (DateTime-Datum) {neues DateTime zurückgeben (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); }, um den letzten Tag des Monats in einem Datumsformat zu erhalten
regisbsb
175
var lastDayOfMonth =DateTime.DaysInMonth(date.Year, date.Month);
@Henk Eigentlich habe ich das von einem Ort in unserer Quelle gezogen, der das DateTimeaus dem erstellt lastDayOfMonth. Ehrlich gesagt funktioniert so oder so perfekt. Es ist ein pedantisches Argument, welcher Weg besser ist. Ich habe es in beide Richtungen gemacht und beide geben die gleiche Antwort.
"Wie bekomme ich den letzten Tag eines Monats?" DateTime.DaysInMonth (Jahr, Monat) gibt zurück, wie viele Tage der Monat hat. Dies gibt die gleiche Antwort für "Was ist der letzte Tag des Monats?" Zurück. Ihr Weg funktioniert, aber ich denke, es ist zu viel Code für eine einfache Sache.
Rochasdv
@rochasdv Dieses DateTime.DaysInMonth (Jahr, Monat) gibt int zurück, aber ich möchte ein DateTime-Objekt. In diesem Fall sind beide Antwortcodes gleich. int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); DateTime lastDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
Ammar
37
Wenn Sie das Datum für einen Monat und ein Jahr angeben möchten , scheint dies ungefähr richtig zu sein:
Sie können das letzte Datum eines Monats anhand dieses Codes ermitteln:
var now =DateTime.Now;var startOfMonth =newDateTime(now.Year, now.Month,1);varDaysInMonth=DateTime.DaysInMonth(now.Year, now.Month);var lastDay =newDateTime(now.Year, now.Month,DaysInMonth);
Ich frage mich DateTime.DaysInMonth, warum statt einer einfachen Methode jemand nach diesem unlesbaren und komplexen Weg suchen sollte, um dies zu erreichen!? - Aber als gültige Lösung ist akzeptabel;).
So erhalten Sie den letzten Tag eines Monats in einem bestimmten Kalender - und in einer Erweiterungsmethode -:
publicstaticintDaysInMonthBy(thisDateTime src,Calendar calendar){var year = calendar.GetYear(src);// year of src in your calendarvar month = calendar.GetMonth(src);// month of src in your calendarvar lastDay = calendar.GetDaysInMonth(year, month);// days in month means last day of that month in your calendarreturn lastDay;}
// Use any date you want, for the purpose of this example we use 1980-08-03.var myDate =newDateTime(1980,8,3);var lastDayOfMonth =newDateTime(myDate.Year, myDate.Month,DateTime.DaysInMonth(myDate.Year, myDate.Month));
Diese Antwort entspricht nur dem Beispiel des Fragestellers. Eine umfassendere Antwort wäre hilfreicher.
Scott Lawrence
Sie können ein beliebiges Datum als Eingabewert verwenden, um diese Lösung auf ein beliebiges Datum anzuwenden.
Jasper Risseeuw
1
Es wird für einige Daten fehlschlagen, versuchen Sie es var myDate = new DateTime(1980, 1, 31);(gibt den 29. zurück)
Hans
Hans Keing, Sie haben recht. Diese Methode schlägt fehl, wenn der nächste Monat weniger Tage als der aktuelle hat. Ich denke, der einfachste Weg ist die Verwendung von DateTime.DaysInMonth (), aber das ist die akzeptierte Antwort, daher sollte meine Antwort gelöscht werden.
Jasper Risseeuw
-1
Ich kenne C # nicht, aber wenn sich herausstellt, dass es keinen bequemen API-Weg gibt, um es zu bekommen, können Sie dies folgendermaßen tun, indem Sie der Logik folgen:
today ->+1 month ->set day of month to 1->-1 day
Dies setzt natürlich voraus, dass Sie eine Datumsmathematik dieses Typs haben.
Antworten:
Der letzte Tag des Monats, den Sie so erhalten, gibt 31 zurück:
quelle
quelle
DateTime
aus dem erstelltlastDayOfMonth
. Ehrlich gesagt funktioniert so oder so perfekt. Es ist ein pedantisches Argument, welcher Weg besser ist. Ich habe es in beide Richtungen gemacht und beide geben die gleiche Antwort.quelle
int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); DateTime lastDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
Wenn Sie das Datum für einen Monat und ein Jahr angeben möchten , scheint dies ungefähr richtig zu sein:
quelle
Ziehen Sie einen Tag vom ersten des nächsten Monats ab:
Falls Sie es auch für Dezember benötigen:
quelle
Sie können das letzte Datum eines Monats anhand dieses Codes ermitteln:
quelle
Sie finden den letzten Tag des Monats in einer einzigen Codezeile:
quelle
DateTime.DaysInMonth
, warum statt einer einfachen Methode jemand nach diesem unlesbaren und komplexen Weg suchen sollte, um dies zu erreichen!? - Aber als gültige Lösung ist akzeptabel;).Von
DateTimePicker:
Erste Verabredung:
Letztes Datum:
quelle
So erhalten Sie den letzten Tag eines Monats in einem bestimmten Kalender - und in einer Erweiterungsmethode -:
quelle
quelle
var myDate = new DateTime(1980, 1, 31);
(gibt den 29. zurück)Ich kenne C # nicht, aber wenn sich herausstellt, dass es keinen bequemen API-Weg gibt, um es zu bekommen, können Sie dies folgendermaßen tun, indem Sie der Logik folgen:
Dies setzt natürlich voraus, dass Sie eine Datumsmathematik dieses Typs haben.
quelle