我们使用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中的配置错误?
谢谢和问候
马克
答案 0 :(得分:5)
“中美洲标准时间”不是您认为的时区。它不是德克萨斯州奥斯汀的那个 - 它是中美洲(危地马拉等)的那个。如果您查看Guatemala time zone(来自之前引用的同一网站),您会发现它始终是UTC-6,没有夏令时。
请参阅this file(摘自CLDR)以获取示例映射。你想要“中央标准时间”,我完全希望能做正确的事。
作为快速插件,如果您想使用.NET中的IANA time zone database,您可能需要考虑使用我的Noda Time库。