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ć.


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 ?


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

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


38

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

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));

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);

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


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);

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.