Обычно я использую приведенный ниже код, но есть ли лучший способ?Последний день месяца в .NET
lastOfMonth = new DateTime(Now.Year, Now.Month, 1).AddMonths(1).AddDays(-1)
Обычно я использую приведенный ниже код, но есть ли лучший способ?Последний день месяца в .NET
lastOfMonth = new DateTime(Now.Year, Now.Month, 1).AddMonths(1).AddDays(-1)
Я использую
DateTime now = DateTime.Today;
var lastDate = new DateTime(now.Year, now.Month, DateTime.DaysInMonth(now.Year, now.Month));
DateTime(year, month, DateTime.DaysInMonth(year, month)).
Вы можете использовать CultureInfo.CurrentCulture.Calendar.GetDaysInMonth (Now.Year, Now.Month)
я бы, вероятно, использовать DaysInMonth
, как это делает код немного читабельнее и понятнее (хотя мне очень нравится трюк :-)). Это requieres аналогичной суммы нажатий клавиша (что довольно много), так что я бы, вероятно, определить метод расширения:
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()
, который выглядит намного лучше :-).
Вот как вы можете получить количество дней в месяце с помощью 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);
Нода Время намеренно заставляет вас думать об этих вещах, а не просто сделав предположения, что DateTime.Now
или DateTime.Today
сделать.
Определите «лучше». –
Я думаю, что только функция, предоставляемая API, будет лучше работать. –
Вы хотите определенное время? Если нет, вы должны использовать «Сегодня», а не «сейчас». –