2010-02-03 22 views
24

Come sottrarre un mese da un oggetto data in VB.NET?Come sottrarre un mese dall'oggetto Date?

ho provato:

Today.AddMonths(-1) 

Tuttavia, dato che oggi è 01-gen-2010, il risultato che ottengo è 01-Dec-2010. La risposta che voglio è 01-dic-2009.

C'è un modo conveniente per farlo all'interno del framework .NET?

+1

OK. Questa domanda (e le risposte) mi stanno davvero confondendo. Qual è il codice esatto che stai utilizzando che presenta il problema sopra riportato? Ho digitato Today.AddMonths (-1) nel debugger e funziona correttamente, sottraendone uno dell'anno se sei a gennaio. –

+2

Ciao Jason. Il problema non era in realtà. AddMonths() non funzionava. Il problema era che gli oggetti Date sono immutabili. Non avevo assegnato il valore restituito di .AddMonths() a una variabile. Ad esempio, stavo facendo alcuniDate.AddMonths (-1), quando dovrebbe essere someDate = someDate.AddMonths (-1). – Andrew

+1

In tal caso, tuttavia, alcuniData non cambierebbero. Ad esempio, nel tuo esempio, sarebbe comunque impostato su 01-gen-2010, non 01-dic-2010. Quindi, la mia confusione. –

risposta

41

In realtà devi trasportare Oggi in una variabile e lasciare che l'incarico funzioni lì. Il seguente codice produrrà il risultato che ti aspetti (l'ho appena verificato perché il tuo post mi ha fatto riflettere due volte).

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

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

* sigh * non posso credere di essere caduto per quello nuovo ... – Andrew

8

Questo funziona correttamente, è necessario ricordare che DateTime è imutable.

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

Dai un'occhiata alla DateTime Structure

Un calcolo su un'istanza di DateTime, come ad esempio somma o sottrazione, non modifica il valore dell'istanza . Invece, il calcolo restituisce una nuova istanza di DateTime il cui valore è il risultato del calcolo .

+1

Grazie. Tutto ciò che -2 affari era confuso. – dbasnett

0

Ho usato quanto segue e funziona.

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