2010-07-29 21 views
6

ho questa riga di codice:C# DateTime fuso orario problemi sottrarre

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

questo non era il numero giusto che volevo, così ho provato la seguente:

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 differenza è che in un caso, utilizzo l'ora locale per l'epoca e nell'altra utilizzo UTC). È interessante il fatto che entrambi mi diano lo stesso valore e non so perché sia ​​così. Vivo a -600 GMT, quindi DateTimeKind.Local dovrebbe effettivamente influenzare le cose.

Grazie in anticipo!

risposta

5

Nella pagina DateTimeKind su MSDN (http://msdn.microsoft.com/en-us/library/shx7s921.aspx), essa afferma:

I membri dell'enumerazione DateTimeKind sono utilizzati in operazioni di conversione tra l'ora locale e tempo universale coordinato (UTC), ma non in operazioni di confronto o aritmetiche . Per ulteriori informazioni sulle conversioni temporali, vedere Conversione di tempi tra fusi orari.

Il consiglio ci dice di usare TimeZoneInfo.ConvertTimeToUtc

Quindi, sulla base di questo, il codice dovrebbe probabilmente essere modificato per:

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

per la cronaca, in realtà è stato questo: double seconds = TimeZoneInfo.ConvertTimeToUtc (new DateTime (2006,7,6,12,1,0, DateTimeKind.Local)). Sottrai (nuovo DateTime (1970,1,1,0,0, 0, DateTimeKind.Local) .TotalSeconds – codersarepeople

1

Prova questo:

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; 
     } 
    } 
} 
Problemi correlati