Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# .NET4.5中的TimeZoneInfo错误_C#_Asp.net_.net_Datetime - Fatal编程技术网

C# .NET4.5中的TimeZoneInfo错误

C# .NET4.5中的TimeZoneInfo错误,c#,asp.net,.net,datetime,C#,Asp.net,.net,Datetime,我最近用.NET4.5框架更新了我的操作系统,并用它编译了我所有的应用程序。 不幸的是,我编写的一些自动测试现在在有关日期时间类型的断言构造上失败了 经过深入分析,我发现: 在.NET4.0中 DateTime dateUsing40 = new DateTime(2011, 4, 7); // ticks 634377312000000000 dateUsing40.ToUniversalTime(); //ticks **634377240000000000 bool isDayl

我最近用.NET4.5框架更新了我的操作系统,并用它编译了我所有的应用程序。 不幸的是,我编写的一些自动测试现在在有关日期时间类型的断言构造上失败了

经过深入分析,我发现:

在.NET4.0中

DateTime dateUsing40 = new DateTime(2011, 4, 7); // ticks 634377312000000000    
dateUsing40.ToUniversalTime(); //ticks **634377240000000000

bool isDaylightST = dateUsing40.IsDaylightSavingTime(); // returns **true
在.NET4.5中

DateTime dateUsing45 = new DateTime(2011, 4, 7); // ticks 634377312000000000
dateUsing45.ToUniversalTime(); //ticks  **634377276000000000    
bool isDaylightST = dateUsing45.IsDaylightSavingTime(); // returns **false
System.Threading.Thread.CurrentThread.CurrentCulture在这两种情况下都是{it}

事实上,我使用的日期是在(意大利,但也适用于所有使用湿的国家)白天的范围内,所以看起来框架中有一个(巨大的)错误。但是我没有发现任何有用的东西

我在两台机器上都进行了验证:

  • 区域设置仍采用意大利语
  • 选中“自动调整夏令时更改时钟”
  • 打开区域和设置->选项卡位置->当前位置仍为空
  • 操作系统Windows 7 x64
已解决:


框架更新将DynamicDaylightTimeDisabled的值更改为1。要解决此问题,必须将其设置为0并重新启动。另一种方法是使用时钟UI表单

检查
var tziloc=TimeZoneInfo.Local的值
(参见Shaun的答案)及其
Id
属性

同样地(我认为),转到PowerShell并编写:

Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation -Name TimeZoneKeyName
并检查
TimeZoneKeyName
winreg“属性”的值
Get ItemProperty
可以缩短为只
gp

根据实验,未使用
CurrentCulture
CurrentUICulture
RegionInfo.CurrentRegion
来确定“本地时间”

如果您转到Windows,请选择“控制面板”→ 时钟、语言和区域→ 日期和时间→ 选项卡日期和时间→ 区段时区→ 按钮更改时区…,更改时区似乎有效


当然,如果Windows注册表包含错误的意大利设置,通常是特定机器上的ID
“W.Europe Standard Time”
(不是
“Romance Standard Time”
,不是
“中欧Standard Time”
),这将是一个问题。

检查
var tziLocal=TimeZoneInfo.Local的值
(参见Shaun的答案)及其
Id
属性

同样地(我认为),转到PowerShell并编写:

Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation -Name TimeZoneKeyName
并检查
TimeZoneKeyName
winreg“属性”的值
Get ItemProperty
可以缩短为只
gp

根据实验,未使用
CurrentCulture
CurrentUICulture
RegionInfo.CurrentRegion
来确定“本地时间”

如果您转到Windows,请选择“控制面板”→ 时钟、语言和区域→ 日期和时间→ 选项卡日期和时间→ 区段时区→ 按钮更改时区…,更改时区似乎有效

当然,如果Windows注册表包含错误的意大利设置,通常是特定机器上的ID
“W.Europe Standard Time”
(不是
“Romance Standard Time”
,不是
“Central European Standard Time”
),那将是一个问题。

使用该类如何

使用这个类怎么样


使用。NET
DateTime
类有一些问题。此处不重现。您确定当前区域性是
吗。在.NET 4.5计算机上是否更改了Windows的区域设置?我也无法复制此设置。使用我自己的区域性(nl BE)和it-it。运行测试时,时区和“自动调整夏令时更改时钟”设置是否相同?在假设框架中存在错误之前,我倾向于非常小心。虽然存在一些问题,但大多数问题是由其他来源引起的。NET
DateTime
类有一些问题。此处不重现。您确定当前区域性是
吗。在.NET 4.5计算机上是否更改了Windows的区域设置?我也无法复制此设置。使用我自己的区域性(nl BE)和it-it。运行测试时,时区和“自动调整夏令时更改时钟”设置是否相同?在假设框架中存在错误之前,我倾向于非常小心。虽然存在一些问题,但大多数问题都是由其他来源引起的。在注册表路径HKEY_LOCAL_MACHINE->SYSTEM->CURRENTCONTROLSET->CONTROL->TIMEZONEINFORMATION中,TimeZoneInfoKey被设置为“W.Europe Standard Time”,但我注意到4.5机器中的“DynamicDaylightTimeDisabled”键被设置为“1”和“0”在4.0机器中,虽然我改变了它,但问题没有改变。我没有问题。对我来说,
DynamicDaylightTimeDisabled
0
DaylightStart
0003 0005 0002 0000
(希望意思是“三月的最后一个星期日”)。您的机器中有什么操作系统?@Riccardo Windows 7 SP1。在注册表路径HKEY_LOCAL_machine->SYSTEM->CURRENTCONTROLSET->CONTROL->TIMEZONEINFORMATION中,TimeZoneInfo键被设置为“W.Europe Standard Time”,但我注意到4.5机器中的“DynamicDaylightTimeDisabled”键被设置为“1”和“0”在4.0机器中,虽然我改变了它,但问题没有改变。我没有问题。对我来说,
DynamicDaylightTimeDisabled
0
DaylightStart
00 03 00 05 00 02 00 00 00
(希望是“三月的最后一个星期日”)。你的机器里有什么操作系统?@Riccardo Windows 7 SP1。