web-dev-qa-db-fra.com

Soustraire des jours à un DateTime

J'ai le code suivant dans mon programme C #.

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

Chaque fois que je l'exécute, j'obtiens l'erreur suivante:

La valeur ajoutée ou soustraite donne un DateTime non représentable.
Nom du paramètre: valeur

Je n'ai jamais vu ce message d'erreur auparavant, et je ne comprends pas pourquoi je le vois. D'après les réponses que j'ai lues jusqu'à présent, je suis persuadé que je peux utiliser -1 dans une opération d'ajout pour soustraire des jours, mais comme ma question le montre, ce n'est pas le cas pour ce que je tente de faire.

116
Buena

Cette erreur se produit généralement lorsque vous essayez de soustraire un intervalle de DateTime.MinValue ou que vous souhaitez ajouter quelque chose à DateTime.MaxValue (ou que vous essayez d'instancier une date en dehors de cet intervalle min-max). Êtes-vous sûr de ne pas attribuer MinValue quelque part?

66
CyberDude
DateTime dateForButton = DateTime.Now.AddDays(-1);
248
christiandev

Tu peux faire:

DateTime.Today.AddDays(-1)
40
sam

Vous pouvez utiliser le code suivant:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));
34
Rajesh Subramanian

J'ai eu des problèmes avec AddDays (-1) .

Ma solution est TimeSpan.

DateTime.Now - TimeSpan.FromDays(1);
3
UsernameNotFound

L'objet (c'est-à-dire la variable de destination) de la méthode AddDays ne peut pas être identique à la source.

Au lieu de:

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

Essayez ceci à la place:

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

La dateTime.AddDays(-1) ne soustrait pas ce jour de la référence dateTime. Il renverra une nouvelle instance avec cette journée soustraite de la référence d'origine.

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

Utiliser AddDays(-1) a fonctionné pour moi jusqu'à ce que j'essaye de traverser des mois. Lorsque j'ai essayé de soustraire 2 jours au 2017-01-01, le résultat était 2016-00-30. Il ne pouvait pas gérer le changement de mois correctement (même si l'année semblait bien se passer).

J'ai utilisé date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); et n'ai aucun problème.

0
Ainsley Hobart