Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从DateTime转换为SqlDateTime不准确_C#_Asp.net - Fatal编程技术网

C# 从DateTime转换为SqlDateTime不准确

C# 从DateTime转换为SqlDateTime不准确,c#,asp.net,C#,Asp.net,我有一个从源(一个DataRow或一个SqlDataReader)获取日期属性的方法: 但是转换似乎稍微改变了日期,所以我的测试总是失败 有人知道为什么这种方法会转换错误吗 在方法的末尾,转换为SqlDateTime似乎会进行一些舍入: value.Value.Ticks: 634698391707468296 sqlValue.Value.Ticks: 634698391707470000 是-SQL ServerDATETIME的精度为3.33毫秒-但是.NET数据类

我有一个从源(一个
DataRow
或一个
SqlDataReader
)获取日期属性的方法:

但是转换似乎稍微改变了日期,所以我的测试总是失败

有人知道为什么这种方法会转换错误吗

在方法的末尾,转换为
SqlDateTime
似乎会进行一些舍入:

value.Value.Ticks:        634698391707468296
sqlValue.Value.Ticks:     634698391707470000

是-SQL Server
DATETIME
的精度为3.33毫秒-但是.NET数据类型可以表示单个毫秒

因此,您有时会遇到一些舍入问题

请阅读更多有关
DATETIME
数据类型及其属性和特性的信息:

此外,SQL Server 2008还引入了一系列与日期相关的新数据类型—请阅读以下内容:


这些类型确实包括精确到100ns的
DATETIME2
数据类型

这是TSQL日期-时间精度的记录-请参阅第页标题为“日期-时间分数秒精度的舍入”的部分。引自该节:

日期时间值四舍五入为.000、.003或.007的增量 秒,如下表所示

.NET日期时间具有更好的精度


此外,MS建议使用更新的数据类型(如datetime2、date、time等),而不是date-time。Sql Server 2008引入的数据类型具有类似的精度(100ns)(与.NET日期/时间结构相同),并且它还支持ISO 8601字符串格式,这将使从.NET日期/时间到Sql日期时间的转换更简单(即,当您被迫使用文字而不是参数化查询时)无损失。

SqlDateTime对象的精度低于.NET DateTime对象,因此转换为SQL时会失去一些精度。

请参阅:谢谢vinayc!我认为marc_s在帖子中击败了你。尽管回答得很好+1,谢谢
value.Value.Ticks:        634698391707468296
sqlValue.Value.Ticks:     634698391707470000