2010-02-03 19 views
24

¿Cómo restar un mes de un objeto de fecha en VB.NET?¿Cómo restar un mes del objeto Date?

que he intentado:

Today.AddMonths(-1) 

Sin embargo, dado que hoy es el 01-ene-2010, el resultado que se ve es 01-dic-2010. La respuesta que quiero es 01-Dic-2009.

¿Hay una manera conveniente de hacer esto dentro del .NET Framework?

+1

OK. Esta pregunta (y las respuestas) realmente me confunden. ¿Cuál es el código exacto que está usando que muestra el problema anterior? Escribí Today.AddMonths (-1) en el depurador y funciona correctamente, restando uno del año si estás en enero. –

+2

Hola Jason. El problema no era que .AddMonths() no funcionaba. El problema era que los objetos Date son inmutables. No había asignado el valor de retorno de .AddMonths() a una variable. Por ejemplo, estaba haciendo someDate.AddMonths (-1), cuando debería ser someDate = someDate.AddMonths (-1). – Andrew

+1

En ese caso, sin embargo, someDate no cambiaría. es decir, en su ejemplo, todavía se establecería en 01-ene-2010, no 01-dic-2010. Por lo tanto, mi confusión. –

Respuesta

41

Realmente tiene que transportar Hoy a una variable y dejar que esa asignación funcione allí. El siguiente código producirá el resultado que espera (lo acabo de verificar porque su publicación me hizo pensar dos veces).

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

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

* suspiro * no puedo creer que me enamoré de eso otra vez ... – Andrew

8

Esto funciona bien, debe recordar que DateTime es imparable.

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

Tenga una mirada en DateTime Structure

Un cálculo en una instancia de DateTime, tales como sumar o restar, no modifica el valor de la ejemplo. En su lugar, el cálculo devuelve una nueva instancia de DateTime cuyo valor es el resultado del cálculo .

+1

Gracias. Todo eso -2 era confuso. – dbasnett

0

He utilizado lo siguiente y funciona.

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