TimeZoneInfo.ConvertTimeFromUtc不考虑DST

mwe*_*ber 0 .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) );
Run Code Online (Sandbox Code Playgroud)

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

谢谢并恭祝安康

Jon*_*eet 5

“中美洲标准时间”不是您认为的时区。这不是德克萨斯州奥斯丁的那一间,它是中美洲(危地马拉等)的那一间。如果查看危地马拉时区(与之前引用的站点相同),您将始终看到它是UTC-6,没有夏令时。

请参阅此文件(取自CLDR)以获取示例映射。您需要“中央标准时间”,我完全希望这样做是对的。

作为快速插件,如果您想使用.NET中的IANA时区数据库,则可能要考虑使用我的Noda Time库。