TimeZone.GetUtcOffset()需要DateTime,但DateTime的时区被忽略,为什么?

时间:2016-11-15 00:45:00

标签: c# datetime timezone timezone-offset

我的目标是获得UTC与其他时区之间的差异。以UTC和EST之间的差异为例(UTC-5:00)。同样为了举例说明我的系统目前处于太平洋标准时间,因此DateTime.Kind," LOCAL"是PST。为了找到UTC和EST之间的差异,我强制提供我在PST中提供的DateTime。这是我的代码的简化代码段:

    public static void Run_Timezone_Test()
    {
        var myDate = DateTime.Now;
        Console.WriteLine(myDate.Kind);
        //OUTPUT: Local (note this is currently PST)

        var easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
        var offset = easternTimeZone.GetUtcOffset(myDate);
        Console.WriteLine(offset);
        //OUTPUT: -05:00:00 (correct offset for EST)

        Console.ReadLine();
    }

为什么我被迫提供" myDate"如果它和它的时区没有使用?

1 个答案:

答案 0 :(得分:3)

以下是一个重要原因的例子:

connect()

在撰写本文时,这将输出(假设您已安装AEST作为系统时间 - 您可以通过var AUSEast = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time"); var offset = AUSEast.GetUtcOffset(DateTime.Now); Console.WriteLine(offset); offset = AUSEast.GetUtcOffset(DateTime.Now.AddMonths(6)); Console.WriteLine(offset); 进行检查):

TimeZoneInfo.GetSystemTimeZones()

请注意,的时区本身表示与UTC的偏移量。时间异常(最常见的是夏令时)将改变UTC偏移,同时仍保持在同一时区