Вычтите дни из DateTime

У меня есть следующий код в моей программе С#.

DateTime dateForButton =  DateTime.Now;  
dateForButton = dateForButton.AddDays(-1);  // ERROR: un-representable DateTime

Всякий раз, когда я запускаю его, я получаю следующую ошибку:

Добавленное или вычтенное значение приводит к непредставляемому DateTime.
Имя параметра: значение

Я никогда не видел это сообщение об ошибке раньше, и не понимаю, почему я его вижу. Из ответов, которые я читал до сих пор, я считаю, что я могу использовать -1 в операции сложения для вычитания дней, но, как показывает мой вопрос, это не тот случай, когда я пытаюсь сделать.

Ответ 1

Эта ошибка обычно возникает при попытке вычесть интервал из DateTime.MinValue или вы хотите добавить что-то в DateTime.MaxValue (или вы пытаетесь создать дату вне этого интервала min-max). Вы уверены, что не используете MinValue где-нибудь?

Ответ 2

DateTime dateForButton = DateTime.Now.AddDays(-1);

Ответ 3

Вы можете сделать:

DateTime.Today.AddDays(-1)

Ответ 4

Вы можете использовать следующий код:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));

Ответ 5

Объект (т.е. целевая переменная) для метода AddDays не может быть таким же, как источник.

Вместо:

DateTime today = DateTime.Today;
today.AddDays(-7);

Попробуйте это вместо:

DateTime today = DateTime.Today;
DateTime sevenDaysEarlier = today.AddDays(-7);

Ответ 6

У меня были проблемы с использованием AddDays (-1).

Мое решение - TimeSpan.

DateTime.Now - TimeSpan.FromDays(1);

Ответ 7

dateTime.AddDays(-1) не вычитает этот один день из ссылки на dateTime. Он вернет новый экземпляр с одним днем, вычтенным из исходной ссылки.

DateTime dateTime = DateTime.Now;
DateTime otherDateTime = dateTime.AddDays(-1);

Ответ 8

Использование AddDays(-1) работало на меня, пока я не попытался пересечь месяцы. Когда я попытался вычесть 2 дня с 2017-01-01, результат был 2016-00-30. Он не мог правильно отрегулировать месяц (хотя год, казалось, был прекрасен).

Я использовал date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); и проблем нет.