@Mark: зачем мне спрашивать? Ваш собственный ответ не требует метода расширения, я думаю.
абатищев
4
Последний день не относится только к месяцу, вам также нужен год. Последний день февраля 2010 года - 28, но последний день февраля 2008 года - 29.
Гуффа
@abatishchev Это не требует метода расширения, но вопрос на самом деле не требует его. Тем не менее, гораздо приятнее и читабельнее, по крайней мере для меня, увидеть его. Метод расширения был скорее предложением, чем чем-либо. Любое решение будет работать в методе расширения, а не только в моем.
Марк
Ответы:
657
Последний день месяца, который вы получаете, как это, который возвращает 31:
public static DateTime ConvertToLastDayOfMonth (DateTime date) {вернуть новый DateTime (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } чтобы получить последний день месяца в формате даты
regisbsb
177
var lastDayOfMonth =DateTime.DaysInMonth(date.Year, date.Month);
@Henk На самом деле я вытащил это из места в нашем источнике, которое создает DateTimeиз lastDayOfMonth. Честно говоря, в любом случае работает отлично. Это педантичный аргумент, какой путь лучше. Я сделал это обоими способами, и оба дают один и тот же ответ.
Марка
37
Если вы хотите указать дату , указав месяц и год, это выглядит примерно так:
Вы можете найти последнюю дату любого месяца по этому коду:
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);
Меня удивляет, что вместо простого метода: DateTime.DaysInMonthпочему кто-то должен искать этот нечитаемый и сложный способ добиться этого !? - но в качестве действительного решения это приемлемо;).
Чтобы получить последний день месяца в определенном календаре - и в методе расширения -:
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));
Этот ответ отвечает только на пример спрашивающего. Более полный ответ был бы более полезным.
Скотт Лоуренс
Вы можете использовать любую дату, которую вы хотите, в качестве входного значения, так что вы можете применить это решение к любой дате, которую вы хотите.
Джаспер Рисзее
1
В некоторых датах это не удастся, попробуйте var myDate = new DateTime(1980, 1, 31);(возвращает 29-е)
Ханс Кеинг
Ганс Кеинг, вы правы. Этот метод потерпит неудачу, если в следующем месяце будет меньше дней, чем в текущем. Я предполагаю, что самый простой способ - использовать DateTime.DaysInMonth (), но это приемлемый ответ, поэтому мой ответ должен быть удален.
Джаспер Рисзее
-1
Я не знаю C #, но, если окажется, что нет удобного способа получить API, один из способов сделать это - следуя логике:
today ->+1 month ->set day of month to 1->-1 day
Конечно, это предполагает, что у вас есть дата математика этого типа.
Ответы:
Последний день месяца, который вы получаете, как это, который возвращает 31:
источник
источник
DateTime
изlastDayOfMonth
. Честно говоря, в любом случае работает отлично. Это педантичный аргумент, какой путь лучше. Я сделал это обоими способами, и оба дают один и тот же ответ.Если вы хотите указать дату , указав месяц и год, это выглядит примерно так:
источник
Вычтите день с первого числа следующего месяца:
Кроме того, если вам нужно, чтобы он работал и в декабре:
источник
Вы можете найти последнюю дату любого месяца по этому коду:
источник
Вы можете найти последний день месяца с помощью одной строки кода:
источник
DateTime.DaysInMonth
почему кто-то должен искать этот нечитаемый и сложный способ добиться этого !? - но в качестве действительного решения это приемлемо;).Из
DateTimePicker:
Первое свидание:
Последнее свидание:
источник
Чтобы получить последний день месяца в определенном календаре - и в методе расширения -:
источник
источник
var myDate = new DateTime(1980, 1, 31);
(возвращает 29-е)Я не знаю C #, но, если окажется, что нет удобного способа получить API, один из способов сделать это - следуя логике:
Конечно, это предполагает, что у вас есть дата математика этого типа.
источник