Subtrahieren Sie Tage von einer DateTime

142

Ich habe den folgenden Code in meinem C # -Programm.

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

Immer wenn ich es ausführe, wird folgende Fehlermeldung angezeigt:

Der addierte oder subtrahierte Wert führt zu einer nicht darstellbaren DateTime.
Parametername: Wert

Ich habe diese Fehlermeldung noch nie gesehen und verstehe nicht, warum ich sie sehe. Aus den Antworten, die ich bisher gelesen habe, geht hervor, dass ich -1 in einer Additionsoperation verwenden kann, um Tage zu subtrahieren, aber wie meine Frage zeigt, ist dies bei dem, was ich versuche, nicht der Fall.

Buena
quelle
Sollte funktionieren, ist dies der Problembereich?
V4Vendetta
1
es muss funktionieren, sehe kein Problem damit ...
Tigran
12
Dieser Fehler tritt normalerweise auf, wenn Sie versuchen, ein Intervall von zu subtrahieren DateTime.MinValueoder etwas hinzuzufügen DateTime.MaxValue(oder wenn Sie versuchen, ein Datum außerhalb dieses Min-Max-Intervalls zu instanziieren). Sind Sie sicher, dass Sie nicht MinValueirgendwo zuweisen ?
CyberDude
1
CyberDude, Ihr Kommentar ist in der Tat Antwort. Wie kann ich über Ihren Kommentar abstimmen und ihn als Antwort zuweisen?
Buena
1
Bitte posten Sie den Code zwischen den Zeilen 2 und 3 Ihres Codes
Panagiotis Kanavos

Antworten:

70

Dieser Fehler tritt normalerweise auf, wenn Sie versuchen, ein Intervall von zu subtrahieren DateTime.MinValueoder etwas hinzuzufügen DateTime.MaxValue(oder wenn Sie versuchen, ein Datum außerhalb dieses Min-Max-Intervalls zu instanziieren). Sind Sie sicher, dass Sie nicht MinValueirgendwo zuweisen ?

CyberDude
quelle
287
DateTime dateForButton = DateTime.Now.AddDays(-1);
christiandev
quelle
14
Diese Antwort, beantworten Sie den Titel des Themas. Dies sollte niemals herabgestuft werden. Die meisten Leute kommen von Google hierher. Wenn jemand mit dieser Antwort nicht einverstanden ist, sollte er eine Bearbeitung des Thementitels anbieten. ¬¬
MarceloBarbosa
Arbeitete sogar über Monate für mich.
David Jones
48

Du kannst tun:

DateTime.Today.AddDays(-1)
Sam
quelle
38

Sie können den folgenden Code verwenden:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));
Rajesh Subramanian
quelle
4
Dies schlägt auch fehl, wenn das Datum DateTime.MinValue lautet. AddDays (-1) funktioniert genauso gut
Panagiotis Kanavos
7

Das dateTime.AddDays(-1) subtrahiert diesen einen Tag nicht von der dateTimeReferenz. Es wird eine neue Instanz zurückgegeben, wobei dieser eine Tag von der ursprünglichen Referenz abgezogen wird.

DateTime dateTime = DateTime.Now;
DateTime otherDateTime = dateTime.AddDays(-1);
cahit beyaz
quelle
Möchten Sie erklären, wie dies das Problem des OP lösen würde? Fast jeder kann Code schreiben, das ist der einfache Teil. (In diesem Fall sehe ich jedoch nicht, wie dies das Problem des OP überhaupt lösen würde.)
Vier Mitternacht,
5

Ich hatte Probleme mit AddDays (-1) .

Meine Lösung ist TimeSpan .

DateTime.Now - TimeSpan.FromDays(1);
Benutzername nicht gefunden
quelle
4

Das Objekt (dh die Zielvariable) für die AddDays-Methode kann nicht mit der Quelle identisch sein.

Anstatt:

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

Versuchen Sie stattdessen Folgendes:

DateTime today = DateTime.Today;
DateTime sevenDaysEarlier = today.AddDays(-7);
Mark Benson
quelle
1
Diese Antwort bringt keinen neuen Punkt, wenn wir uns die anderen vorhandenen Antworten ansehen.
Isuka
0

Verwenden von AddDays(-1) hat bei mir funktioniert, bis ich versucht habe, Monate zu überqueren. Als ich versuchte, 2 Tage vom 01.01.2017 abzuziehen, war das Ergebnis 2016-00-30. Es konnte die Monatsänderung nicht richtig handhaben (obwohl das Jahr in Ordnung zu sein schien).

Ich habe verwendet date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); und habe keine Probleme.

Ainsley Hobart
quelle
0

Anstatt die Anzahl der Tage direkt vom Datumsobjekt direkt zu verringern, erhalten Sie zuerst den Datumswert und subtrahieren dann die Tage. Siehe Beispiel unten:

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

Hier ist someDate eine Variable vom Typ DateTime.

Sambhav Jain
quelle