2010-02-03 11 views
24

Comment soustraire un mois d'un objet date dans VB.NET?Comment soustraire un mois à partir de l'objet Date?

J'ai essayé:

Today.AddMonths(-1) 

Cependant, étant donné que aujourd'hui est 01-Jan-2010, le résultat que je reçois est 01-Dec-2010. La réponse que je veux est 01-Dec-2009.

Existe-t-il un moyen pratique de le faire dans le framework .NET?

+1

OK. Cette question (et les réponses) me dérange vraiment, vraiment. Quel est le code exact que vous utilisez qui présente le problème ci-dessus? J'ai tapé Today.AddMonths (-1) dans le débogueur et cela fonctionne correctement, en soustrayant un de l'année si vous êtes en janvier. –

+2

Bonjour Jason. Le problème n'était pas réellement que .AddMonths() ne fonctionnait pas. Le problème était que les objets Date sont immuables. Je n'avais pas assigné la valeur de retour de .AddMonths() à une variable. Par exemple, je faisais someDate.AddMonths (-1), quand il devrait être someDate = someDate.AddMonths (-1). – Andrew

+1

Dans ce cas, cependant, someDate ne changerait pas. c'est-à-dire dans votre exemple, il serait toujours défini sur 01-Jan-2010, pas 01-Dec-2010. D'où ma confusion. –

Répondre

41

Vous devez en fait transporter aujourd'hui dans une variable et laisser cette affectation travailler là. Le code suivant produira le résultat que vous attendez (je viens de le vérifier car votre post m'a fait réfléchir à deux fois).

Dim dt As DateTime = Date.Today 
dt = dt.AddMonths(-2) 

Dim x As String = dt.ToString() 
+2

* soupir * ne peut pas croire que je suis tombé pour celui-là à nouveau ... – Andrew

8

Cela fonctionne très bien, vous devez vous rappeler que le DateTime est imitable.

Dim d As DateTime 
d = New DateTime(2010, 1, 1) 
d = d.AddMonths(-1) 

Jetez un oeil à DateTime Structure

Un calcul sur une instance de DateTime, comme Ajouter ou Soustraire, ne modifie pas la valeur de l'instance . Au lieu de cela, le calcul renvoie une nouvelle instance de DateTime dont la valeur est le résultat du calcul .

+1

Merci. Toutes ces affaires étaient confuses. – dbasnett

0

J'ai utilisé ce qui suit et cela fonctionne.

Dim dtToday As DateTime = Date.Today 
dtToday = dtToday.AddMonths(-2) 
1
Dim d As DateTime = #1/1/2010# 
d = d.AddMonths(-1)