TimeZoneInfo.ConvertTimeFromUtc不考虑DST

时间:2013-04-30 15:05:16

标签: .net timezone

我们使用TimeZoneInfo.ConvertTimeFromUtc将UTC时间转换为本地时间等价物。当转换到时区“中美洲标准时间”时,结果似乎不考虑夏令时。

根据此页http://www.timeanddate.com/worldclock/city.html?n=24和我的客户,他们在德克萨斯州奥斯汀有夏令时

我的测试代码:

        DateTime result;
        DateTime utcTime = Convert.ToDateTime("20.04.2013 11:32:00");
        try
        {
            TimeZoneInfo sourceTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time");
            result = TimeZoneInfo.ConvertTimeFromUtc(utcTime, sourceTimeZone);
        }
        catch (Exception)
        {
            result = Convert.ToDateTime("01.01.1900 00:00:00");
        }
        Console.WriteLine();
        Console.WriteLine( Convert.ToString(result) );

它给出了20.04.2013 05:32:00而不是20.04.2013 06:32:00(dst中的-5小时偏移)。 我使用的方法错了吗?框架中的错误? Windows中的配置错误?

谢谢和问候

马克

1 个答案:

答案 0 :(得分:5)

“中美洲标准时间”不是您认为的时区。它不是德克萨斯州奥斯汀的那个 - 它是中美洲(危地马拉等)的那个。如果您查看Guatemala time zone(来自之前引用的同一网站),您会发现它始终是UTC-6,没有夏令时。

请参阅this file(摘自CLDR)以获取示例映射。你想要“中央标准时间”,我完全希望能做正确的事。

作为快速插件,如果您想使用.NET中的IANA time zone database,您可能需要考虑使用我的Noda Time库。