2010-07-29 18 views
6

tengo esta línea de código:C# DateTime cuestiones restar de zona horaria

double seconds = new DateTime(2006,7,6,12,1,0,DateTimeKind.Local).Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Local).TotalSeconds; 

Este no era el número correcto que quería, así que intentado el siguiente:

double seconds = new DateTime(2006,7,6,12,1,0,DateTimeKind.Local).Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc).TotalSeconds; 

(La diferencia es que en un caso, uso la hora local para la época, y en la otra, uso UTC). Curiosamente, sin embargo, ambos me dan el mismo valor, y no sé por qué es así. Vivo a -600 GMT, por lo que DateTimeKind.Local realmente debería afectar las cosas.

¡Gracias de antemano!

Respuesta

5

En la página DateTimeKind en MSDN (http://msdn.microsoft.com/en-us/library/shx7s921.aspx), que establece lo siguiente:

Los miembros de la enumeración DateTimeKind se utilizan en las operaciones de conversión entre la hora local y Tiempo Universal Coordinado (UTC), pero no en las operaciones de comparación o aritméticos . Para obtener más información sobre las conversiones de tiempo, consulte Convertir tiempos entre zonas horarias.

El consejo no dice que el uso TimeZoneInfo.ConvertTimeToUtc

Así, sobre la base de que, el código probablemente debería ser modificado para:

double seconds = new DateTime(2006,7,6,12,1,0,DateTimeKind.Local).Subtract(TimeZoneInfo.ConvertTimeToUtc(new DateTime(1970,1,1,0,0,0,DateTimeKind.Local)).TotalSeconds 
+1

para el registro, en realidad terminó siendo esto: segundos dobles = TimeZoneInfo.ConvertTimeToUtc (new DateTime (2006,7,6,12,1,0, DateTimeKind.Local)). Restar (nuevo DateTime (1970,1,1,0,0, 0, DateTimeKind.Local) .TotalSeconds – codersarepeople

1

Prueba esto:

namespace ConsoleApplication1 
{ 
    using System; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var laterDate = new DateTime(2006, 7, 6, 12, 1, 0); 
      var earlyDate = new DateTime(1970, 1, 1, 0, 0, 0); 
      var diff = laterDate.ToUniversalTime().Subtract(earlyDate.ToUniversalTime()); 
      var seconds = diff.TotalSeconds; 
     } 
    } 
} 
Cuestiones relacionadas