C# DateTime。现在返回了奇怪的日期

C# DateTime。现在返回了奇怪的日期,c#,.net,C#,.net,我有一个用C#.NET3.5编写的WinForms应用程序。此应用程序与SQL Server 2008交互。每当我向数据库中添加记录时,我都会在其中插入一个DateAdd列DateTime.Now。无论出于何种原因,我有4张日期奇数的记录: '1980-01-03 23:08:43.970' '1980-01-03 23:08:44.157' '1980-01-03 23:08:44.530' '1980-01-03 23:08:45.547' 这些之前和之后的记录都有

我有一个用C#.NET3.5编写的WinForms应用程序。此应用程序与SQL Server 2008交互。每当我向数据库中添加记录时,我都会在其中插入一个
DateAdd
DateTime.Now
。无论出于何种原因,我有4张日期奇数的记录:

'1980-01-03 23:08:43.970'    
'1980-01-03 23:08:44.157'    
'1980-01-03 23:08:44.530'    
'1980-01-03 23:08:45.547'
这些之前和之后的记录都有适当的日期
'2011-05-29 XX:XX:XX.XXX'
。用户无权修改任何应用程序中的日期字段

有没有什么理由让日期变成这样?用户没有权限修改他们的系统时间,我假设是DateTime。现在收集日期


基本上,我得出的结论是,要么是有缺陷,要么是用户的Delorean完全配备了磁通电容器…

如果这是一个客户端windows应用程序,请检查用户正在使用的机器上的系统时间。另外,我不知道这是否是最佳做法,但我发现如果我在SQLSERVER中使用GetDate(),而不是在需要记录当前时间的情况下从C#.NET应用程序中传递日期,那么维护起来就更容易了。

您的一台用户计算机上的主板电池已经没电了-寻找“与Windows 98兼容”的版本在某人办公桌下的黄色康柏桌面正面贴上标签。在将记录写入数据库之前,该计算机已通电2天。下一次完全关闭或电源循环时,将返回到1980年1月1日


最佳做法是让数据库指定日期(将列默认值设置为GETDATE())。通过这种方式,使用单一日期方案,您不必担心用户更改日期,不同用户的事件以错误的顺序出现,因为他们的计算机彼此相隔几分钟,或者,由于时区设置不正确,时间缩短了几个小时。

可能有一位用户将其系统时间设置回1980年?除此之外,我同意Jason的观点,用户没有时间访问系统。另外,您还需要什么其他信息?该列实际上是日期类型吗?是DateTime。现在在客户端或服务器上执行吗?在您的SQL server上,2000-01-01前后的日期是否有所不同?@aaron:BIOS时钟出现故障的电脑可能会在没有用户参与的情况下产生错误的时间。我同意BIOS是造成这种情况的潜在原因,我有一台电脑,主板上的电池没电了,每次电脑重启,日期都会重置为1980年1月1日。@David@Joel我想你们是对的。我总是在电池没电的时候发现这个。这就是为什么我认为最好不要相信客户端应用程序能够获取当前日期和时间。始终在您有控制权的服务器上执行此操作。如果这是标准,有人可以回答吗?我以前在其他应用程序中也这样做过,但有人告诉我不要使用它,因为它会给SQL框带来更大的压力(我认为这是真的,但我发现很难相信获取当前日期会带来这么大的压力……除非我有数千个条目都试图同时获取日期)。@Aaron听起来像是BS。我认为设置日期服务器端是最好的做法,也是唯一可靠地控制日期的方法。如果这真的会给您的SQL server带来压力,您需要尽快安装一台新服务器!Ceraly从不将GetDate()放在筛选器或join语句中,但如果您不调用每一行,那么我就不会担心它。我曾经非常关心标准,但我厌倦了在我的应用程序中出现bug。如果我或dba看起来不好,那就不是我:)说真的,标准是一个很好的起点,但在我看来,信任客户机来确定日期或时间似乎不是一个好主意。您总是需要一个集中的标准。web应用程序将是一个例外,因为它的所有代码都在中央服务器上运行。@Jonathan尽管如此,您永远不知道您的web应用程序在什么时候会在web场上扩展。对这类事情最好提前计划;谁想回到过去,在任何可能安排约会的地方都能找到呢?最好还是在数据库中设置日期。