加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – DateTime.Parse在XP vs Windows 7/8上有所不同

发布时间:2020-12-14 04:37:36 所属栏目:Windows 来源:网络整理
导读:在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 在W
在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

为什么??!?

从字符串中删除TimeZone(-04:00)会导致.NET4下的XP和Windows 7上的值相同.当从字符串执行DateTime.Parse时,Windows XP似乎在.NET4下以不同的方式应用时区偏移量.有没有办法改变这种行为,以便它在.NET4下是一致的,无论操作系统如何(不涉及操纵发送到DateTime.Parse的字符串)

环境:
所有计算机都安装了最新的修补程序(可通过Windows Update获得),并配置为“东部时间”,并在“时区设置”中选中“自动调整夏令时的时钟”.

我已在使用.NET4的Windows 7计算机和使用.NET4.5的Windows 7计算机上确认了此行为

解决方法

计算历史日期的本地时间要求.NET了解在该日期期间生效的夏令时规则.这当然是一件非常棘手的事情,因为DST规则在各地和日期之间变化很大.

您的日期的UTC偏移为-4,使其位于美国东部时区附近.最相关的夏令时规则改变了2005年能源政策法案,该法案将DST从3月的第2个星期日到11月的第1个星期日生效,从2007年开始生效.因此了解当地时间1998年10月31日要求知道这项法律尚未生效.

这就是差异的来源. Windows Vista是第一个拥有这些DST更改数据库的Windows版本,.NET 4是第一个开始使用它的.NET版本. XP没有该数据库,因此.NET无法做任何事情,只是假设当前的DST规则生效.

这是您在与当地时间合作时需要处理的不可避免的损失.不要,使用UTC.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读