2010-02-03 12 views
24

Jak odjąć miesiąc od obiektu daty w VB.NET?Jak odjąć miesiąc od obiektu Date?

Próbowałem:

Today.AddMonths(-1) 

Biorąc jednak pod uwagę, że dzisiaj jest 01-sty-2010, wynik jest wyświetlany jest 01-Dec-2010. Odpowiedź, której chcę, to 01-grudzień-2009.

Czy jest to wygodny sposób wykonania tej operacji w środowisku .NET?

+1

OK. To pytanie (i odpowiedzi) naprawdę mnie dezorientują. Jaki jest dokładnie używany kod, który wykazuje powyższy problem? Wpisałem Today.AddMonths (-1) do debuggera i działa poprawnie, odejmując jeden od roku, jeśli jesteś w styczniu. –

+2

Witam Jason. Problem w rzeczywistości nie był .AddMonths() nie działa. Problem polegał na tym, że obiekty Date są niezmienne. Nie przypisałem wartości zwracanej przez .AddMonths() do zmiennej. Na przykład, robiłem someDate.AddMonths (-1), kiedy powinno być someDate = someDate.AddMonths (-1). – Andrew

+1

W takim przypadku niektóre wartości nie zmienią się. np. w twoim przykładzie byłaby ona ustawiona na 01-Jan-2010, a nie 01-Dec-2010. Stąd moje zamieszanie. –

Odpowiedz

41

Rzeczywiście musisz przenieść dzisiejszy parametr do zmiennej i pozwolić, aby to zadanie działało. Poniższy kod przyniesie oczekiwany rezultat (właśnie go zweryfikowałem, ponieważ Twój wpis spowodował, że zastanowiłem się dwa razy).

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

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

* westchnienie * nie mogę uwierzyć, że znowu się do tego zakochałem ... – Andrew

8

To działa dobrze, musisz pamiętać, że DateTime jest niezmienny.

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

Wystarczy popatrzeć na DateTime Structure

obliczeń na wystąpienie DateTime, takie jak dodawanie czy odejmowanie, nie zmienia wartości instancji . Zamiast tego, obliczenie zwraca nowe wystąpienie DateTime , którego wartość jest wynikiem obliczenia .

+1

Dzięki. Cały ten -2 biznes był mylący. – dbasnett

0

Użyłem następujących i to działa.

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