C#日期时间时区减法问题

7

I have this line of code:

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 应该实际影响事情。

提前感谢!

2个回答

6
在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
记录一下,实际上它最终是这样的: 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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接