Відняти дні з DateTime


142

У моїй програмі 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, ваш коментар насправді відповідь. Як я можу проголосувати за ваш коментар і призначити його як відповідь?
Буена

1
Будь ласка, опублікуйте код між 2 та 3 рядками вашого коду
Панайотис Канавос

Відповіді:


70

Ця помилка, як правило, виникає, коли ви намагаєтесь відняти інтервал від DateTime.MinValueабо хочете щось додати DateTime.MaxValue(або намагаєтесь встановити дату поза цим інтервалом міні-макс). Ви впевнені, що нікуди не призначаєтесь MinValue?


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

14
Ця відповідь, відповідь на заголовок теми. Цього ніколи не слід обмежувати. Більшість людей приїжджають сюди з google. Якщо хтось не згоден з цією відповіддю, слід запропонувати редагувати заголовок теми. ¬¬
MarceloBarbosa

Працювали на мене навіть протягом місяців.
Девід Джонс



7

Цей день dateTime.AddDays(-1) не віднімається від dateTimeпосилання. Він поверне новий екземпляр, з якого один день віднімається від початкового посилання.

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

Хочете пояснити, як це вирішило б проблему ОП? Практично кожен може написати код, це легка частина. (Однак у цьому випадку я насправді не бачу, як це взагалі вирішить проблему ОП.)
чотириночі


4

Об'єкт (тобто змінна призначення) для методу AddDays не може бути таким самим, як джерело.

Замість:

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

Спробуйте це замість цього:

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

1
Ця відповідь насправді не приносить нового пункту, якщо ми шукаємо інші відповіді.
Ісука

1

Замість того, щоб безпосередньо зменшити кількість днів від об'єкта дати, спочатку отримайте значення дати, а потім відніміть дні. Дивіться приклад нижче:

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.