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


147

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

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

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

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

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


Должно работать, это проблема?
V4Vendetta

1
он должен работать, не вижу в этом никаких проблем ...
Тигран

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

1
CyberDude, ваш комментарий - это ответ. Как я могу проголосовать за ваш комментарий и назначить его ответом?
Buena

1
Пожалуйста, разместите код между строками 2 и 3 вашего кода
Панайотис Канавос,

Ответы:


72

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


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

15
Это ответ, ответьте на название темы. Это никогда не должно быть отвергнуто. Большинство людей приходят сюда из Google. Если кто-то не согласен с этим ответом, следует предложить редактирование заголовка темы. ¬¬
MarceloBarbosa 08

Работал у меня даже через несколько месяцев.
Дэвид Джонс,



8

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

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

Не хотите ли объяснить, как это решит проблему OP? Почти каждый может писать код, это самая простая часть. (Однако в данном случае я вообще не понимаю, как это могло бы решить проблему OP.)
fourpastmidnight


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.