2010-07-29 63 views
6

我有這行代碼:C#的DateTime時區減去問題

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

這不是正確的號碼,我想,所以我嘗試了以下內容:

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

(不同的是,在一種情況下,我使用本地時間作爲時代,而另一種情況下我使用UTC)。有趣的是,他們都給我同樣的價值,我不知道這是爲什麼。我住在格林尼治標準時間-600,所以DateTimeKind.Local實際上應該影響事情。

在此先感謝!

回答

5

在MSDN上(http://msdn.microsoft.com/en-us/library/shx7s921.aspx)的DateTimeKind頁面,它指出:

的DateTimeKind枚舉的成員在本地時間之間轉換操作使用和協調世界時(UTC),但不是在比較或算術運算。有關時間轉換的更多信息,請參閱轉換時區之間的時間。

的建議有說,使用TimeZoneInfo.ConvertTimeToUtc

因此,基於這樣的代碼也許應該修改爲:

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

備案,它實際上結果是: double seconds = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2006,7,6,12,1,0,DateTimeKind.Local))。Subtract(new DateTime(1970,1,1,0,0, 0,DateTimeKind.Local ).TotalSeconds – codersarepeople 2010-07-29 15:40:04

1

試試這個:

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