C# TimeZoneInfo.ConvertTimeFromUtc返回不正确的结果
我对C# TimeZoneInfo.ConvertTimeFromUtc返回不正确的结果,c#,datetime,timezone,C#,Datetime,Timezone,我对TimeZoneInfo.ConvertTimeFromUtc有一种非常奇怪的行为。 你认为这会带来什么回报 var date = new DateTime(2000, 1, 1, 12, 0, 0); var dest = TimeZoneInfo.FindSystemTimeZoneById("Belarus Standard Time"); TimeZoneInfo.ConvertTimeFromUtc(date, dest); 白俄罗斯标准时间为UTC+3。我希望{01.01.20
TimeZoneInfo.ConvertTimeFromUtc
有一种非常奇怪的行为。
你认为这会带来什么回报
var date = new DateTime(2000, 1, 1, 12, 0, 0);
var dest = TimeZoneInfo.FindSystemTimeZoneById("Belarus Standard Time");
TimeZoneInfo.ConvertTimeFromUtc(date, dest);
白俄罗斯标准时间为UTC+3。我希望{01.01.2000 15:00:00}
。
但我看到了下一个:
沃特
这在几天前是正确的。但是今天我运行了单元测试并注意到了这一点。在运行测试之前,我安装了Visual Studio 2015。会发生什么,为什么?如何修复它
PS:它在另一台机器上正常工作。实际上,转换是正确的 虽然白俄罗斯目前的时区全年都是UTC+3,但自2012年以来一直如此 在此之前,它的标准偏移量为UTC+2,从3月的最后一个星期日到10月的最后一个星期日,它观测到了UTC+3的昼间偏移量(也称为“夏季”)。这一变化是通过在2011年的夏季停留并永久停留在那里而不是倒退而实现的 使用
“白俄罗斯标准时间”
时区时,将从Windows注册表中以下位置的数据中提取该时区的信息:
HKLM\SOFTWARE\Microsoft\windowsnt\CurrentVersion\timezones\belower标准时间
在这里,您将看到基本信息,以及一个名为Dynamic DST
的子键,其中包含逐年变化。您会注意到Windows在此区域有三个条目:
- 一个适用于2010年及之前的版本,可在标准时间和白天之间交替使用
- 一个是2011年的,它在不返回标准时间的情况下对夏时制进行了一次更改
- 一个用于2012年及更高版本,在标准时间用新的基准偏移量固定
另外,请注意,由于数据是在Windows as 2011和之前版本中建模的,与2012和forward规则具有不同的基准偏移量,因此它会受到中所述问题的影响。该文章的状态部分已过时,因为该问题已通过.NET4.6解决。即使您的目标是.NET 3.5到.NET 4.5.2,如果计算机上安装了.NET 4.6,那么它的行为也会正确。如果机器上未安装.NET 4.6,它将为2011年、2010年及之前的白俄罗斯应用错误的基准偏移量。(这就是为什么SonerGönül在问题评论中提到了
15:00
)你真的确定吗?这似乎很奇怪。它在我身上返回{01.01.2000 15:00:00}
。@SonerGönül,是的,我确定。安装新版本的VS a后,看起来有一个带有bug的dll。顺便问一下,您的环境是什么。Net框架版本和Windows版本?.Net框架4.5.1,Windows 8.1现在我明白了。谢谢你的澄清,马特。