在 XP 和 Windows 7 上执行以下操作会在 .NET4 和 .NET2 控制台应用程序中产生不同的结果:
Console.WriteLine(String.Format("DateTime.Parse on Client: {0}",
DateTime.Parse("1998-10-31T00:00:00-04:00")));
.NET4
在 XP 下返回: 10/31/1998 12:00:00 AM
在 Windows 7/Windows 8 下返回: 10/30/1998 11:00:00 PM
.NET2
在 XP 下返回: 10/31/1998 12:00:00 AM
在 Windows 7/Windows 8 下返回: 10/31/1998 12:00:00 AM
为什么??!?
从字符串中删除 TimeZone(-04:00)会导致该值在 XP 和 Windows 7 下的 .NET4 上相同。从字符串执行 DateTime.Parse 时,Windows XP 似乎在 .NET4 下以不同的方式应用时区偏移。有没有办法改变这种行为,使其在 .NET4 下保持一致,不受操作系统的影响(不涉及操作发送到 DateTime.Parse 的字符串)
环境: 所有机器都安装了最新补丁(可通过 Windows 更新获得),并配置为东部时间,并在“时区设置”中选中“自动调整夏令时时钟”。
我已经在带有 .NET4 的 Windows 7 机器和带有 .NET4.5 的 Windows 7 机器上确认了这种行为