Подтвердить что ты не робот

Последний день месяца в .NET.

Обычно я использую приведенный ниже код, но есть ли лучший способ?

lastOfMonth = new DateTime(Now.Year, Now.Month, 1).AddMonths(1).AddDays(-1)
4b9b3361

Ответ 1

Я использую

DateTime now = DateTime.Today;
var lastDate = new DateTime(now.Year, now.Month, DateTime.DaysInMonth(now.Year, now.Month));

Ответ 2

Я бы, вероятно, использовал DaysInMonth, поскольку он делает код более понятным и понятным (хотя мне очень нравится трюк:-)). Это требует одинакового набора символов (что довольно много), поэтому я бы, вероятно, определил метод расширения:

DateTime LastDayOfMonth(this DateTime) {
  var days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
  return new DateTime(DateTime.Now.Year, DateTime.Now.Month, days);
}

Теперь мы можем использовать DateTime.Now.LastDayOfMonth(), который выглядит намного лучше: -).

Ответ 3

DateTime(year, month, DateTime.DaysInMonth(year, month)).

Ответ 4

Вы можете использовать CultureInfo.CurrentCulture.Calendar.GetDaysInMonth(Now.Year, Now.Month)

Ответ 5

Вот как вы можете получить количество дней в месяце, используя Noda Time:

int days = CalendarSystem.Iso.GetDaysInMonth(year, month);

Довольно просто, а? Хорошо, что предполагает, что вы знаете год и месяц, о которых вы спрашиваете. Если вы хотите его в течение текущего месяца и в часовом поясе системы, то вы должны указать это явно, например:

DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
LocalDate localDate = SystemClock.Instance.Now.InZone(tz).Date;
int days = localDate.Calendar.GetDaysInMonth(localDate.Year, localDate.Month);

Время Noda преднамеренно заставляет задуматься над этими вещами, а не просто делать предположения, что DateTime.Now или DateTime.Today делать.