Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TimeZoneInfo.ConvertTimeFromUtc返回不正确的结果_C#_Datetime_Timezone - Fatal编程技术网

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年及更高版本,在标准时间用新的基准偏移量固定
请注意,这是对的简化,它跟踪1992年及以前的其他变化。Windows不知道这些更改,所以如果您将使用这个时区来处理历史日期,则应考虑使用“代替代码> TimeZoNeFiels<代码>,因为NoDA时间支持TZDB时区。


另外,请注意,由于数据是在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现在我明白了。谢谢你的澄清,马特。