2010-03-22 5 views
209

Как я могу найти последний день месяца на C#?Как я могу получить последний день месяца?

Например, если у меня есть дата 03/08/1980, как я могу получить последний день месяца 8 (в данном случае 31)?

+2

@Mark: Зачем я могу спросить? Думаю, ваш собственный ответ не требует метода расширения. – abatishchev

+4

Последний день не относится только к месяцу, вам также нужен год. Последний день февраля 2010 года - 28, но последний день февраля 2008 года - 29. – Guffa

+0

@abatishchev. Это не метод _require_, но вопрос на самом деле его не спрашивает. Тем не менее, это намного лучше и гораздо более удобочитаемо, по крайней мере для меня, чтобы увидеть его. Метод расширения был скорее предложением, чем чем-либо. Любое решение будет работать в методе расширения, а не только на моем. – Mark

ответ

414

В последний день месяца вы получаете, как это, который возвращает 31:

DateTime.DaysInMonth(1980, 08); 
+14

public static DateTime ConvertToLastDayOfMonth (DateTime date) { return new DateTime (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } , чтобы получить последний день месяца в формате даты – regisbsb

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

«Как получить последний день месяца?». DateTime.DaysInMonth (год, месяц) вернет количество дней в месяце, это вернет тот же ответ для «какой последний день месяца». Твой путь работает, но я думаю, что слишком много кода для простой вещи. – rochasdv

9

Вычтите в день с первого числа следующего месяца:

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

Кроме того, в случае, если вам это нужно, чтобы работать на декабрь тоже:

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

@Henk На самом деле я вытащил это из места в нашем источнике, который создает 'DateTime' из' lastDayOfMonth'. Честно говоря, в любом случае все работает отлично. Это педантичный аргумент, который лучше. Я сделал это в обоих направлениях, и оба дают тот же ответ. – Mark

+0

Mark, no.Ваш результат - 'int', my' DateTime'. О том, кто из нас лучше читал (догадывался) спецификации. –

1

Я не» t знает C#, но, если окажется, что нет удобного метода API для его получения, один из способов, которым вы можете это сделать, - следовать логике:

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

Конечно, предполагается, что у вас есть математика такого типа.

23

Если вы хотите дату, учитывая месяц и год, это, кажется, о праве:

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

Вы можете найти последнюю дату каждого месяца этого кода:

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

Вы можете найти в последний день месяца по одной строке кода:

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

Мне интересно, что вместо простого метода: 'DateTime.DaysInMonth', почему кто-то должен искать этот нечитаемый и сложный способ его достижения !? - Но как допустимое решение приемлемо;). –

3

От DateTimePicker:

Первая дата:

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

Последняя дата:

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

Получить последний день месяца в определенном календаре - и в методе расширения -:

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; 
} 
Смежные вопросы