¿Por qué DateTime.AddHours no parece funcionar?

Tengo el mismo resultado 1338161400 cuando lo hago

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 obtener 1338168600 como http://www.mbari.org/staff/rich/utccalc.htm

Actualizar:

Gracias, cambié 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 tengo 1338147000 todavía no 1338168600

Las fechas son objetos inmutables, es decir, no se pueden modificar 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á.

Utilizar:

 DateTime newDate = date.AddHours(-4); 

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

Por lo tanto, quieres date = date.AddHours(-4); en lugar de solo date.AddHours(-4);

La fecha original se establece 4 horas hacia atrás, pero no la configuró para la nueva fecha. prueba esto en su lugar:

 date = date.AddHours(-4); 

AddHours simplemente devuelve la nueva fecha incrementada, usa esto:

 date = date.AddHours(-4); 

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

Si haces esto:

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

Luego, la estructura d1 se sobrescribirá con los valores de d2.

No sé si es posible tener una estructura inmutable.

AddHours devuelve un nuevo objeto DateTime. hacer esto:

 date = date.AddHours(-4); 

Documentación: enlace

Prueba si esto funciona:

 System.DateTime today = System.DateTime.Now; System.TimeSpan duration = new System.TimeSpan(0, 11, 0, 0); System.DateTime answer = today.Add(duration); System.Console.WriteLine("{0:dddd}", answer); 

Esto parece cambiar el día en la fecha también en agregar horas.