【问题标题】:C# DateTime time zone subtract issuesC# DateTime 时区减法问题
【发布时间】:2011-03-22 12:19:18
【问题描述】:

我有这行代码:

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

提前致谢!

【问题讨论】:

    标签: c# datetime timezone


    【解决方案1】:

    在 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
    

    【讨论】:

    • 为了记录,它实际上最终是这样的: 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
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多