2010-07-29 17 views
6

mam ten wiersz kodu:C# DateTime kwestie Odejmowanie strefy czasowej

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

To nie była właściwa ilość chciałem, więc próbowałem następujące:

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

(Różnica polega na tym, że w jednym przypadku używam czasu lokalnego dla epoki, a w drugiej używam UTC). Co ciekawe, obaj dają mi tę samą wartość i nie wiem, dlaczego tak jest. Żyję w -600 GMT, więc DateTimeKind.Local powinien wpłynąć na rzeczy.

Z góry dziękuję!

Odpowiedz

5

Na stronie DateTimeKind na MSDN (http://msdn.microsoft.com/en-us/library/shx7s921.aspx), stwierdza:

Członkowie wyliczenia DateTimeKind są wykorzystywane w operacjach wymiany między czasem lokalnym i uniwersalnym czasem koordynowanym (UTC), ale nie w operacji porównania lub arytmetycznych . Aby uzyskać więcej informacji na temat konwersji czasu, zobacz Konwertowanie czasów między strefami czasowymi.

Porady nie mówi do korzystania TimeZoneInfo.ConvertTimeToUtc

Tak więc, w oparciu o które, kod powinien chyba być modyfikowane w celu:

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

dla rekordu, to faktycznie skończyło się na tym, że: podwójne sekundy = TimeZoneInfo.ConvertTimeToUtc (nowy DateTime (2006,7,6,12,1,0, DateTimeKind.Local)). Odejmij (nowy DateTime (1970,1,1,0,0, 0, DateTimeKind.Local) .TotalSeconds – codersarepeople

1

Spróbuj tego:

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; 
     } 
    } 
} 
Powiązane problemy