我一直在寻找如何从UTC转换为山区时间,并且我成功地找到了每个人都考虑到DST的以下功能。每当它从UTC转换为Mountain时,偏移量始终为-7(当前应为-6)。除非似乎并非如此。谁能为我提供一些启发,或考虑到DST的方式?

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

谢谢,
德曼

最佳答案

看起来.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

关于c# - 使用DST从UTC转换为美国山区时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13166931/

10-10 10:12