我最近更新了我的操作系统,使用了 .net 4.5 框架并编译了所有应用程序。不幸的是,我写的一些自动化测试现在在关于 DateTime 类型的 Assert 结构上失败了。
经过深入分析,我发现了以下问题:
在 .net 4.0 中,
DateTime dateUsing40 = new DateTime(2011, 4, 7); // ticks 634377312000000000
dateUsing40.ToUniversalTime(); //ticks **634377240000000000
bool isDaylightST = dateUsing40.IsDaylightSavingTime(); // returns **true
in .net 4.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-IT}。
实际上,我使用的日期处于(意大利以及所有使用WET的国家)夏令时范围内,因此似乎在框架中存在一个(巨大的)错误。但是我没有找到任何有用的信息。
我在两台机器上进行了验证:
- 区域设置仍设置为意大利语。
- “自动调整时钟以进行夏令时更改”已选中。
- 打开区域设置和设置->在选项卡位置上 ->当前位置仍为意大利。
- 操作系统为Windows 7 x64。
已解决:
框架更新将DynamicDaylightTimeDisabled的值更改为1。要解决此问题,需要将其转换为0并重新启动。另一种方法是使用时钟UI表单。
NodaTime
。.NET 的DateTime
类存在一些问题。 - Soner GönülCurrentCulture
是正确的吗?.NET 4.5机器的区域设置是否被更改了? - Jeppe Stig Nielsen