考虑以下程序:

DateTime dateTime = new DateTime(634546165144647370);
SqlDateTime sqlDateTime = new SqlDateTime(dateTime);

Console.WriteLine("dateTime.TimeOfDay    = " + dateTime.TimeOfDay);
Console.WriteLine("sqlDateTime.TimeOfDay = " + sqlDateTime.Value.TimeOfDay);
Console.ReadLine();

将具有以下输出:
dateTime.TimeOfDay    = 10:21:54.4647370
sqlDateTime.TimeOfDay = 10:21:54.4630000

奇怪的是.464737四舍五入为.463。不应该四舍五入到.464吗?
我想我没有在.NET代码中发现错误,所以问题是:
为什么会变成这样?
我怎样才能得到客户端舍入,从而完成sqlserver要做的工作呢?
顺便说一下,我将这个日期时间保存到了一个sql server数据库(在date time列中)并再次将其取出,结果显示为10:21:54.4670000。所以我真的很困惑。(我认为sqldatetime将与sql server要做的工作相匹配。)
注意:因为我使用的是odata,所以不能在sql server中使用datetime2。

最佳答案

sql serverDATETIME的精度为3.33ms,因此,您无法获得所有可能的值,很有可能.464就是这样一个值。
在SQL Server 2008上,您可以使用精度为100ns的DATETIME2TIME(x)数据类型,这些数据类型应该足够“正常”使用

08-24 21:13