2010-02-03 2 views
24

Wie subtrahiere ich einen Monat von einem Datumsobjekt in VB.NET?Wie subtrahiere ich einen Monat vom Date-Objekt?

ich versucht habe:

Today.AddMonths(-1) 

Angesichts der Tatsache, dass heute 01-Jan-2010 ist das Ergebnis, das ich bekommen, ist 01-Dec-2010. Die Antwort, die ich will, ist 01-Dec-2009.

Gibt es eine bequeme Möglichkeit, dies innerhalb des .NET-Frameworks zu tun?

+1

OK. Diese Frage (und die Antworten) verwirren mich wirklich, wirklich. Was ist der genaue Code, den Sie verwenden, der das obige Problem aufweist? Ich tippte Today.AddMonths (-1) in den Debugger und es funktioniert ordnungsgemäß, Subtrahieren Sie eine von dem Jahr, wenn Sie im Januar sind. –

+2

Hallo Jason. Das Problem war nicht, dass .AddMonths() nicht funktionierte. Das Problem bestand darin, dass Datumsobjekte unveränderlich sind. Ich hatte den Rückgabewert von .AddMonths() nicht einer Variablen zugewiesen. Zum Beispiel habe ich someDate.AddMonths (-1) gemacht, wenn es someDate = someDate.AddMonths (-1) sein sollte. – Andrew

+1

In diesem Fall würde sich jedoch etwasDate nicht ändern. in Ihrem Beispiel wäre es immer noch auf den 01. Januar 2010 und nicht auf den 01. Dez. 2010 eingestellt. Daher meine Verwirrung. –

Antwort

41

Sie müssen heute tatsächlich in eine Variable transportieren und diese Aufgabe dort arbeiten lassen. Der folgende Code erzeugt das Ergebnis, das Sie erwarten (ich habe es gerade verifiziert, weil Ihr Beitrag mich dazu gebracht hat, zweimal darüber nachzudenken).

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

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

* seufz * kann nicht glauben, dass ich wieder für diesen gefallen bin ... – Andrew

8

Dies funktioniert gut, Sie müssen daran denken, dass die DateTime unveränderlich ist.

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

Werfen Sie einen Blick auf DateTime Structure

Eine Berechnung auf einer Instanz von Datum- und wie addieren oder subtrahieren, hat den Wert der Instanz nicht ändern. Stattdessen gibt die Berechnung eine neue Instanz von DateTime zurück, deren Wert das Ergebnis der Berechnung ist.

+1

Danke. Das ganze Geschäft war verwirrend. – dbasnett

0

Ich habe das folgende verwendet und es funktioniert.

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