C#DateTime时区减去问题

时间:2010-07-29 03:03:09

标签: c# datetime timezone

我有这行代码:

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 GMT,所以DateTimeKind.Local实际上应该影响事情。

提前致谢!

2 个答案:

答案 0 :(得分:5)

在MSDN上的DateTimeKind页面(http://msdn.microsoft.com/en-us/library/shx7s921.aspx)中,它声明:

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 :(得分: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;
        }
    }
}