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

147

В моей программе на C # есть следующий код.

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

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

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

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

Buena
источник
Должно работать, это проблема?
V4Vendetta
1
он должен работать, не вижу в этом никаких проблем ...
Тигран
12
Эта ошибка обычно возникает, когда вы пытаетесь вычесть интервал DateTime.MinValueили хотите что-то добавить DateTime.MaxValue(или вы пытаетесь создать экземпляр даты за пределами этого минимального-максимального интервала). Вы уверены, что никуда не назначаете MinValue?
CyberDude
1
CyberDude, ваш комментарий - это ответ. Как я могу проголосовать за ваш комментарий и назначить его ответом?
Buena
1
Пожалуйста, разместите код между строками 2 и 3 вашего кода
Панайотис Канавос,

Ответы:

72

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

CyberDude
источник
300
DateTime dateForButton = DateTime.Now.AddDays(-1);
christiandev
источник
15
Это ответ, ответьте на название темы. Это никогда не должно быть отвергнуто. Большинство людей приходят сюда из Google. Если кто-то не согласен с этим ответом, следует предложить редактирование заголовка темы. ¬¬
MarceloBarbosa 08
Работал у меня даже через несколько месяцев.
Дэвид Джонс,
48

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

DateTime.Today.AddDays(-1)
Сэм
источник
41

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

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));
Раджеш Субраманиан
источник
4
Это также не удастся, если дата DateTime.MinValue. AddDays (-1) работает так же хорошо
Панайотис Канавос,
8

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

DateTime dateTime = DateTime.Now;
DateTime otherDateTime = dateTime.AddDays(-1);
Cahit Beyaz
источник
Не хотите ли объяснить, как это решит проблему OP? Почти каждый может писать код, это самая простая часть. (Однако в данном случае я вообще не понимаю, как это могло бы решить проблему OP.)
fourpastmidnight
6

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

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

DateTime.Now - TimeSpan.FromDays(1);
Имя пользователяNotFound
источник
В чем конкретно заключалась ваша проблема?
Arash.Zandi
4

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

Вместо того:

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

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

DateTime today = DateTime.Today;
DateTime sevenDaysEarlier = today.AddDays(-7);
Марк Бенсон
источник
1
Этот ответ на самом деле не приносит новой точки, если мы смотрим на другие существующие ответы.
Isuka
2

Вместо того, чтобы напрямую уменьшать количество дней от объекта даты, сначала получите значение даты, а затем вычтите дни. См. Пример ниже:

DateTime SevenDaysFromEndDate = someDate.Value.AddDays(-1);

Здесь someDate - это переменная типа DateTime.

Самбхав джайн
источник
0

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

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

Эйнсли Хобарт
источник