@Mark: Po co mogę prosić? Myślę, że twoja odpowiedź nie wymaga metody rozszerzenia.
abatishchev
4
Ostatni dzień nie jest specyficzny tylko dla miesiąca, potrzebujesz również roku. Ostatni dzień lutego 2010 r. To 28, ale ostatni dzień lutego 2008 r. To 29.
Guffa
@abatishchev Nie wymaga metody rozszerzenia, ale tak naprawdę nie wymaga tego pytanie. Jednak jest to o wiele ładniejsze i czytelniejsze, przynajmniej dla mnie, aby zobaczyć to jedno. Metoda rozszerzenia była raczej sugestią niż cokolwiek innego. Każde rozwiązanie działałoby w metodzie rozszerzenia, a nie tylko moje.
public static DateTime ConvertToLastDayOfMonth (data DateTime) {zwróć nowy DateTime (data.Rok, data.Miesiąc, DateTime.DaysInMonth (data.Rok, data.Miesiąc)); }, aby uzyskać ostatni dzień miesiąca w formacie daty
regisbsb
175
var lastDayOfMonth =DateTime.DaysInMonth(date.Year, date.Month);
@Henk Właściwie ściągnąłem to z miejsca w naszym źródle, które tworzy DateTimez lastDayOfMonth. Szczerze mówiąc, oba sposoby działają idealnie dobrze. To pedantyczny argument, który sposób jest lepszy. Zrobiłem to na dwa sposoby i oba dają tę samą odpowiedź.
Mark
37
Jeśli chcesz mieć datę , biorąc pod uwagę miesiąc i rok, wydaje się to właściwe:
Możesz znaleźć ostatnią datę dowolnego miesiąca według tego kodu:
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);
Zastanawiam się, że zamiast prostej metody: DateTime.DaysInMonthdlaczego ktoś powinien szukać tego nieczytelnego i złożonego sposobu na osiągnięcie tego celu !? - Ale jako prawidłowe rozwiązanie jest do przyjęcia;).
Aby uzyskać ostatni dzień miesiąca w określonym kalendarzu - i w metodzie rozszerzenia -:
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));
Ta odpowiedź odpowiada tylko na przykład pytającego. Bardziej wyczerpująca odpowiedź byłaby bardziej pomocna.
Scott Lawrence
Możesz użyć dowolnej daty jako wartości wejściowej, dzięki czemu możesz zastosować to rozwiązanie do dowolnej daty.
Jasper Risseeuw
1
W niektórych datach się nie powiedzie, spróbuj var myDate = new DateTime(1980, 1, 31);(zwraca 29)
Hans Ke sting
Hans Keinging, masz rację. Ta metoda zawiedzie, jeśli następny miesiąc będzie miał mniej dni niż obecny. Wydaje mi się, że najłatwiejszym sposobem jest użycie DateTime.DaysInMonth (), ale jest to zaakceptowana odpowiedź, więc moja odpowiedź powinna zostać usunięta.
Jasper Risseeuw
-1
Nie znam C #, ale jeśli okaże się, że nie ma wygodnego sposobu na uzyskanie API, jednym ze sposobów możesz to zrobić, postępując zgodnie z logiką:
today ->+1 month ->set day of month to 1->-1 day
Oczywiście zakłada to, że masz matematykę tego typu.
Odpowiedzi:
Ostatni dzień miesiąca wygląda następująco: 31
źródło
źródło
DateTime
zlastDayOfMonth
. Szczerze mówiąc, oba sposoby działają idealnie dobrze. To pedantyczny argument, który sposób jest lepszy. Zrobiłem to na dwa sposoby i oba dają tę samą odpowiedź.Jeśli chcesz mieć datę , biorąc pod uwagę miesiąc i rok, wydaje się to właściwe:
źródło
Odejmij dzień od pierwszego następnego miesiąca:
Ponadto, jeśli potrzebujesz, aby działał również w grudniu:
źródło
Możesz znaleźć ostatnią datę dowolnego miesiąca według tego kodu:
źródło
Ostatni dzień miesiąca możesz znaleźć w jednym wierszu kodu:
źródło
DateTime.DaysInMonth
dlaczego ktoś powinien szukać tego nieczytelnego i złożonego sposobu na osiągnięcie tego celu !? - Ale jako prawidłowe rozwiązanie jest do przyjęcia;).Od
DateTimePicker:
Pierwsza randka:
Ostatnia randka:
źródło
Aby uzyskać ostatni dzień miesiąca w określonym kalendarzu - i w metodzie rozszerzenia -:
źródło
źródło
var myDate = new DateTime(1980, 1, 31);
(zwraca 29)Nie znam C #, ale jeśli okaże się, że nie ma wygodnego sposobu na uzyskanie API, jednym ze sposobów możesz to zrobić, postępując zgodnie z logiką:
Oczywiście zakłada to, że masz matematykę tego typu.
źródło