【发布时间】:2026-02-12 09:20:12
【问题描述】:
在 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 下返回: 1998 年 10 月 30 日晚上 11:00:00
.NET2
在 XP 下返回: 10/31/1998 12:00:00 AM
在 Windows 7/Windows 8 下返回: 1998 年 10 月 31 日凌晨 12:00:00
为什么??!?
从字符串中删除 TimeZone(-04:00)会导致该值在 XP 和 Windows 7 下的 .NET4 上相同。从字符串执行 DateTime.Parse 时,Windows XP 似乎在 .NET4 下以不同的方式应用时区偏移。有什么方法可以改变这种行为,使其在 .NET4 下保持一致,不受操作系统约束(不涉及操作发送到 DateTime.Parse 的字符串)
环境: 所有机器都安装了最新的补丁(可通过 Windows 更新获得)并配置为东部时间,并在“时区设置”中选中“自动调整夏令时时钟”。
我已经在使用 .NET4 的 Windows 7 机器和使用 .NET4.5 的 Windows 7 机器上确认了这种行为
【问题讨论】:
-
能否请您发布显示日期字符串的相关 XML 片段?另外,所有机器都有最新的服务包吗? DST 信息随服务包一起提供(并非始终)。
-
我建议您尝试使用更简单的服务来缩小问题范围。尝试只返回
DateTime的服务调用。这将从问题中消除DataSet。 -
@JohnSaunders DateTime 操作在所有环境中都是正确的。我已更新帖子以包含新操作和结果。
-
@Art 既然你已经有了通过网络发送的字符串,那么客户端机器上会发生什么(当你尝试
Console.WriteLine(DateTime.Parse("1998-10-31T00:00:00-04:00"))时在 XP 和 Win7 上会发生什么?? -
我建议你删除这个问题并开始一个新的问题,忽略网络服务和序列化方面。
标签: .net windows parsing date datetime