【发布时间】:2013-11-19 11:53:59
【问题描述】:
我最近使用 .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
在 .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。 .NETDateTime类有一些麻烦。 -
此处不复现。你确定
CurrentCulture。 .NET 4.5 机器上的 Windows 区域设置是否已更改? -
我也无法重现这个。都使用我自己的文化 (nl-BE) 和 it-IT。
-
运行测试时,时区和“自动调整时钟以适应夏令时变化”设置是否相同?
-
在假设框架中存在错误之前,我往往会非常小心。虽然有一些问题,但大多数问题来自其他来源。