Как вычесть из даты месяц
в month записываю 1 января 2021 года, а в lastDayOfLastMonth от 1 января отнимаю один месяц и получаю Exception {"Year, Month, and Day parameters describe an un-representable DateTime."} в место этого хочу получить , декабрь 2020 года , как это сделать?
var month = new DateTime(2021, 1, 1).Month;
DateTime lastDayOfLastMonth = new DateTime(DateTime.Now.Year, month - 1, 1);
Ответы (1 шт):
Отнимание месяца от даты работает не так. Не нужно в середине этого процесса выделять из даты месяц и производить с ним операции.
Дата должна в максимальном количестве случаев оставаться датой.
Вам нужно из даты вычесть 1 месяц?
Тогда так:
var dt = new DateTime(2021, 1, 1);
DateTime lastDayOfLastMonth = dt.AddMonth(-1);
В результате Вы получите 1 декабря 20 года. это не совпадает по смыслу с названием переменной, чтобы совпадало - нужно вычитать не 1 месяц, а один день:
var dt = new DateTime(2021, 1, 1);
DateTime lastDayOfLastMonth = dt.AddDays(-1);
В результате выполнения этого кода Вы получите 31 декабря 20-го года.
А ошибку, которую Вы написали в вопросе, Вы получаете из за того, что кгода в переменной month получаете номер месяца==1, потом из этой единицы ВЫЧИТАЕТЕ единицу (получив 0), и этот ноль передаёте на вход конструктору даты в качестве номера месяца.