2012-05-28 25 views
13

tengo 1338161400 mismo resultado cuando lo haga¿Por qué DateTime.AddHours no parece funcionar?

DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    DateTime date = DateTime.Parse(@"28/05/12 01:30"); 
    TimeSpan diff = date.ToUniversalTime() - origin; 
    Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString()); 

, así como cuando uso date.AddHours (-4):

DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    DateTime date = DateTime.Parse(@"28/05/12 01:30"); 
    date.AddHours(-4); 
    TimeSpan diff = date.ToUniversalTime() - origin; 
    Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString()); 

Intento conseguir 1338168600 como http://www.mbari.org/staff/rich/utccalc.htm

actualización :

Gracias He cambiado a

DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    DateTime date = DateTime.Parse(@"28/05/2012 01:30"); 
    date = date.AddHours(-4); 
    date = date.ToUniversalTime(); 
    TimeSpan diff = date - origin; 
    Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString()); 

pero me dio 1338147000 todavía no 1338168600

Respuesta

49

Las fechas son objetos inmutables, es decir, que no pueden ser modificados después de la creación. DateTime.AddHours devuelve una nueva instancia de DateTime que se desplaza hacia atrás en 4 horas, pero "fecha" no se modificará.

Uso:

DateTime newDate = date.AddHours(-4); 
+6

+1 para la llamada inmutable. –

+0

Respuesta correcta Tengo que esperar 6 minutos antes de comprobarlo como una buena respuesta debido a la regla de stackoverflow. Pero he actualizado mi publicación, ¿puedes leerla gracias? – user310291

+0

Finalmente, no importa, solo necesito agregar +2 en su lugar :) – user310291

7

AddHours devuelve un objeto nuevo DateTime que es el resultado de sumar las horas en el original. El original no se modifica.

Así que quieren date = date.AddHours(-4); en lugar de sólo date.AddHours(-4);

4

AddHours simplemente devuelve la nueva fecha incrementado, utilice esto:

date = date.AddHours(-4); 
2

AddHours vuelve nuevo objeto DateTime. hacer esto:

date = date.AddHours(-4); 

Documentación: link

5

La fecha original está colocado 4 horas hacia atrás pero no partían a la nueva fecha. intente esto en su lugar:

date = date.AddHours(-4); 
2

DateTime no es inmutable. Es solo que los métodos DateTime no cambian la estructura, sino que devuelven una nueva.

Si hace esto:

DateTime d1 = DateTime.Now; 
DateTime d2 = DateTime.Now; 
d1 = d2; 

Entonces, la estructura d1 se sobrescribe con los valores de d2.

No sé si es posible tener una estructura inmutable.

Cuestiones relacionadas