2010-07-29 62 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; 
     } 
    } 
}