9

我一直在寻找如何从 UTC 转换为山区时间,我成功地找到了以下每个人都说考虑到 DST 的函数。每当它从 UTC 转换为 Mountain 时,偏移量始终为 -7(当前应该为 -6)。除了它似乎不是。任何人都可以为我阐明这一点,或者让其考虑 DST 的方法吗?

DateTime utcTime = new DateTime(createdDate.Ticks, DateTimeKind.Utc);
DateTime mountainTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(utcTime, "US Mountain Standard Time");

谢谢,德曼

4

2 回答 2

15

看起来 .NET 中有两个区域(至少在我的 Windows 8 安装中)是山区时间。

您正在使用“美国山地标准时间”,但它不遵守 DST(它适用于亚利桑那州)——而普通的“山地标准时间”确实遵守 DST。所以你只需要摆脱“美国”部分,它就会起作用:

using System;

class Test
{
    static void Main()
    {
        DateTime octoberUtc = new DateTime(2012, 10, 1, 0, 0, 0, DateTimeKind.Utc);
        DateTime decemberUtc = new DateTime(2012, 12, 1, 0, 0, 0, DateTimeKind.Utc);
        ConvertToMountainTime(octoberUtc);
        ConvertToMountainTime(decemberUtc);
    }

    static void ConvertToMountainTime(DateTime utc)
    {
        DateTime mountain = TimeZoneInfo.ConvertTimeBySystemTimeZoneId
            (utc, "Mountain Standard Time");

        Console.WriteLine("{0} (UTC) = {1} Mountain time", utc, mountain);
    }
}

输出(英国文化):

01/10/2012 00:00:00 (UTC) = 30/09/2012 18:00:00 Mountain time
01/12/2012 00:00:00 (UTC) = 30/11/2012 17:00:00 Mountain time
于 2012-10-31T20:35:27.947 回答
1

山区标准时间仍然是-7。与流行的看法相反,我们不会改变我们的时间,而是我们的时。我们当前的时区实际上是山区夏令时。弄清楚时区信息是……令人不快

于 2012-10-31T20:31:54.353 回答