Вычтите дни из 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");
и проблем нет.