Возможный дубликат:
Как получить последний день месяца?
Пока у меня есть это:
DateTime createDate = new DateTime(year, month, 1).AddMonths(1).AddDays(-1);
Есть ли лучший способ?
Возможный дубликат:
Как получить последний день месяца?
Пока у меня есть это:
DateTime createDate = new DateTime(year, month, 1).AddMonths(1).AddDays(-1);
Есть ли лучший способ?
Как насчет использования DaysInMonth
:
DateTime createDate = new DateTime (year, month,
DateTime.DaysInMonth(year, month));
(Обратите внимание, что это необходимо сделать в Noda Time...)
Вы можете использовать метод DateTime.DaysInMonth(year,month)
, чтобы получить количество дней в любой месяц.
Вот элегантный подход, который я нашел в полезной библиотеке расширений DateTime на CodePlex:
http://datetimeextensions.codeplex.com/
Вот пример кода:
public static DateTime First(this DateTime current)
{
DateTime first = current.AddDays(1 - current.Day);
return first;
}
public static DateTime First(this DateTime current, DayOfWeek dayOfWeek)
{
DateTime first = current.First();
if (first.DayOfWeek != dayOfWeek)
{
first = first.Next(dayOfWeek);
}
return first;
}
public static DateTime Last(this DateTime current)
{
int daysInMonth = DateTime.DaysInMonth(current.Year, current.Month);
DateTime last = current.First().AddDays(daysInMonth - 1);
return last;
}
В нем есть еще несколько полезных расширений, которые могут вам помочь.
если вас интересует пользовательская версия кода:
var anyDt = DateTime.Now;
var lastDayOfMonth = anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date;
или
var anyDt = DateTime.Now;
var lastDayOfMonth = anyDt.AddDays(1-anyDt.Day).AddMonths(1).AddDays(-1).Date;
или как метод:
DateTime LastDayInMonth(DateTime anyDt)
{ return anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date; }
или как метод расширения:
DateTime LastDayInMonth(DateTime this anyDt)
{ return anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date; }