Как вычесть из даты месяц

в 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 шт):

Автор решения: S.H.

Отнимание месяца от даты работает не так. Не нужно в середине этого процесса выделять из даты месяц и производить с ним операции.

Дата должна в максимальном количестве случаев оставаться датой.

Вам нужно из даты вычесть 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), и этот ноль передаёте на вход конструктору даты в качестве номера месяца.

→ Ссылка