Odejmij dni od DateTime

142

Mam następujący kod w moim programie C #.

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

Za każdym razem, gdy go uruchamiam, pojawia się następujący błąd:

Dodana lub odjęta wartość powoduje, że DateTime nie można przedstawić.
Nazwa parametru: wartość

Nigdy wcześniej nie widziałem tego komunikatu o błędzie i nie rozumiem, dlaczego go widzę. Z odpowiedzi, które Iv'e przeczytałem do tej pory, dochodzę do wniosku, że mogę użyć -1 w operacji dodawania, aby odjąć dni, ale jak pokazuje moje pytanie, nie dotyczy to tego, co próbuję zrobić.

Buena
źródło
Powinien działać, czy to jest problem?
V4Vendetta
1
to musi działać, nie widzę z tym żadnego problemu ...
Tigran
12
Ten błąd zwykle występuje, gdy próbujesz odjąć interwał od DateTime.MinValuelub chcesz coś dodać DateTime.MaxValue(lub próbujesz utworzyć wystąpienie daty poza tym przedziałem min-maks). Czy na pewno MinValuegdzieś nie przypisujesz ?
CyberDude
1
CyberDude, twój komentarz jest w rzeczywistości odpowiedzią. Jak mogę zagłosować na Twój komentarz i przypisać go jako odpowiedź?
Buena
1
Umieść kod między liniami 2 i 3 swojego kodu
Panagiotis Kanavos

Odpowiedzi:

70

Ten błąd zwykle występuje, gdy próbujesz odjąć interwał od DateTime.MinValuelub chcesz coś dodać DateTime.MaxValue(lub próbujesz utworzyć wystąpienie daty poza tym przedziałem min-maks). Czy na pewno MinValuegdzieś nie przypisujesz ?

CyberDude
źródło
287
DateTime dateForButton = DateTime.Now.AddDays(-1);
christiandev
źródło
14
Ta odpowiedź, odpowiedz na tytuł tematu. Nigdy nie należy tego odrzucać. Większość ludzi pochodzi z Google. Jeśli ktoś nie zgadza się z tą odpowiedzią powinien zaproponować edycję w tytule tematu. ¬¬
MarceloBarbosa
Pracował dla mnie nawet przez kilka miesięcy.
David Jones
48

Możesz to zrobić:

DateTime.Today.AddDays(-1)
sam
źródło
38

Możesz użyć następującego kodu:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));
Rajesh Subramanian
źródło
4
To również się nie powiedzie, jeśli data to DateTime.MinValue. AddDays (-1) działa równie dobrze
Panagiotis Kanavos
7

dateTime.AddDays(-1) Nie odejmować, że jeden dzień z dateTimeodniesieniem. Zwróci nowe wystąpienie, po odjęciu tego jednego dnia od pierwotnego odniesienia.

DateTime dateTime = DateTime.Now;
DateTime otherDateTime = dateTime.AddDays(-1);
cahit beyaz
źródło
Chcesz wyjaśnić, jak to rozwiązałoby problem PO? Prawie każdy może pisać kod, to łatwa część. (Jednak w tym przypadku tak naprawdę nie widzę, jak to w ogóle rozwiązałoby problem PO).
cztery po północy
5

Miałem problemy z korzystaniem z AddDays (-1) .

Moje rozwiązanie to TimeSpan .

DateTime.Now - TimeSpan.FromDays(1);
Nazwa użytkownika nie znaleziona
źródło
Jaki był twój dokładny problem?
Arash.Zandi
4

Obiekt (tj. Zmienna docelowa) metody AddDays nie może być tym samym, co źródło.

Zamiast:

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

Spróbuj tego zamiast tego:

DateTime today = DateTime.Today;
DateTime sevenDaysEarlier = today.AddDays(-7);
Mark Benson
źródło
1
Ta odpowiedź tak naprawdę nie wnosi nowego punktu, jeśli szukamy innych istniejących odpowiedzi.
Isuka
1

Zamiast bezpośrednio zmniejszać liczbę dni od obiektu daty, najpierw pobierz wartość daty, a następnie odejmij dni. Zobacz poniższy przykład:

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

Tutaj someDate jest zmienną typu DateTime.

Sambhav jain
źródło
0

Używanie AddDays(-1)działało dla mnie, dopóki nie próbowałem przekroczyć miesięcy. Kiedy próbowałem odjąć 2 dni od 01.01.2017, wynik był 2016-00-30. Nie był w stanie poprawnie obsłużyć zmiany miesiąca (choć rok wydawał się w porządku).

Użyłem date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); i nie mam żadnych problemów.

Ainsley Hobart
źródło