Soustraire des jours d'un DateHeure


142

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 entraîne 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 amené à croire 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 de ce que j'essaie de faire.


Devrait fonctionner, est-ce le problème?
V4Vendetta

1
ça doit marcher, ne vois aucun problème avec ça ...
Tigran

12
Cette erreur se produit généralement lorsque vous essayez de soustraire un intervalle de DateTime.MinValueou 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 MinValuequelque part?
CyberDude

1
CyberDude, votre commentaire est en fait Answer. Comment puis-je voter sur votre commentaire et l'attribuer comme réponse?
Buena

1
Veuillez poster le code entre les lignes 2 et 3 de votre code
Panagiotis Kanavos

Réponses:


70

Cette erreur se produit généralement lorsque vous essayez de soustraire un intervalle de DateTime.MinValueou 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 MinValuequelque part?


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

14
Cette réponse, répondez au titre du sujet. Cela ne devrait jamais être critiqué. La plupart des gens viennent ici de Google. Si quelqu'un n'est pas d'accord avec cette réponse, vous devez proposer une modification du titre du sujet. ¬¬
MarceloBarbosa

A travaillé pour moi même pendant des mois.
David Jones

48

Tu peux faire:

DateTime.Today.AddDays(-1)

38

Vous pouvez utiliser le code suivant:

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

4
Cela échouera également si la date est DateTime.MinValue. AddDays (-1) fonctionne aussi bien
Panagiotis Kanavos

7

Le dateTime.AddDays(-1) ne soustrait pas ce jour de la dateTimeréférence. Il renverra une nouvelle instance, avec ce jour soustrait de la référence d'origine.

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

Voulez-vous expliquer comment cela résoudrait le problème du PO? Presque tout le monde peut écrire du code, c'est la partie la plus simple. (Cependant, dans ce cas, je ne vois pas vraiment comment cela résoudrait le problème de l'OP du tout.)
fourpastmidnight


4

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

Au lieu de:

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

Essayez plutôt ceci:

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

1
Cette réponse n'apporte pas vraiment de nouveau point si l'on regarde les autres réponses existantes.
Isuka

1

Au lieu de réduire directement le nombre de jours à partir de l'objet de date, obtenez d'abord la valeur de la date, puis soustrayez les jours. Voir l'exemple ci-dessous:

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

Ici, someDate est une variable de type DateTime.


0

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.