Обычно я использую приведенный ниже код, но есть ли лучший способ?
lastOfMonth = new DateTime(Now.Year, Now.Month, 1).AddMonths(1).AddDays(-1)
Обычно я использую приведенный ниже код, но есть ли лучший способ?
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));
Я бы, вероятно, использовал 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()
, который выглядит намного лучше: -).
DateTime(year, month, DateTime.DaysInMonth(year, month)).
Вы можете использовать CultureInfo.CurrentCulture.Calendar.GetDaysInMonth(Now.Year, Now.Month)
Вот как вы можете получить количество дней в месяце, используя 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
делать.