2010-04-29 13 views
21

Solo quiero agregar 1 día a un DateTime. Así que escribí:Agregando un TimeSpan a un DateTime dado

DateTime date = new DateTime(2010, 4, 29, 10, 25, 00); 
TimeSpan t = new TimeSpan(1, 0, 0, 0); 

date.Add(t); 

Console.WriteLine("A day after the day: " + date.ToString()); 

me pareció que el resultado sería: 2010 04 30- 10:25:00 pero sigo teniendo la fecha inicial.

¿Qué pasa?

Respuesta

51

DateTime valores son inmutables . El método Add devuelve un nuevo valor de DateTime con el TimeSpan añadido.

Esto funciona:

Console.WriteLine("A day after the day: " + date.Add(t).ToString()); 
+0

Gracias. ¡Resolvió mi problema! –

+0

es posible que desee aceptar esta respuesta. –

+0

Sí.Voy a. Solo tengo una restricción, así que no me deja hacerlo antes de los 11 minutos. No sé por qué ... –

5

¿Qué hay de malo en simplemente hacer date = date.AddDays(1)?

+0

todavía tiene el mismo problema - DateTime son inmutables :) –

+0

Mi Tiempo Delta es un intervalo de tiempo. Entonces no puedo usar AddDays, que toma un entero como parámetro. –

+0

@Amokrane, si su delta es un intervalo de tiempo, creo que debería reformular el título de la pregunta. –

15

necesita cambiar una línea:

date = date.Add(t); 
5

El resultado de date.Add (t) es lo que está buscando:

DateTime date = new DateTime(2010, 4, 29, 10, 25, 00); 
TimeSpan t = new TimeSpan(1, 0, 0, 0); 

// The change is here, setting date to be the *new* date produced by calling Add 
date = date.Add(t); 

Console.WriteLine("A day after the day: " + date.ToString()); 
7

una fecha y hora es inmutable, pero el sumar y restar funciones devuelven nueva DateTimes para que lo use.

DateTime tomorrow = DateTime.Now.AddDays(1); 
2
date.Add(t); 

devuelve un DateTime modificado y no cambia la instancia original en el que se llama al método Add de.

8

dtb tiene razón sobre DateTime siendo inmutable. Piénselo de esta manera: un DateTime es un tipo de valor, que lo coloca en la misma categoría que int o double. Las instancias de estas estructuras no pueden ser modificadas; solo pueden ser evaluados y copiados.

consideran este código:

int i = 4; 

i + 2;  // does not compile, but what if it did? 
      // would i become 6? clearly not -- 
      // i + 2 expresses a NEW value, which can 
      // be copied somewhere 

i = i + 2; // there we go -- that's better 

Esto es análogo a:

DateTime d = DateTime.Now; 
TimeSpan t = TimeSpan.FromDays(1.0); 

d.Add(t);  // compiles (because AddDays is a function), 
       // but is really the same as i + 2 above 

d = d.Add(t); // that's better 

Por cierto, una cosa que podría ayudar a hacer esto más claro es darse cuenta de que la línea anterior, d = d.Add(t), es la lo mismo que d = d + t. Y no escribiría d + t en su propia línea, al igual que no escribiría i + 2 en su propia línea.

1

DateTime no funcionará si DateTime obj datatype es "DateTime?" que toma acepta valores nulos, en tal caso DateTime? dt = DateTime.Now;

 DateTime dateObj = new DateTime(); 

     dateObj = Convert.ToDateTime(dt.ToString()); 

     var Month3 = dateObj.AddMonths(3);` 
Cuestiones relacionadas