我有一个从源( DataRow或SqlDataReader)获取date属性的方法:
protected SqlDateTime GetSqlDateTimePropertyValue(string propertyName, object source)
{
var objValue = GetPropertyValue(propertyName, source);
var value = objValue == DBNull.Value ? null : (DateTime?)objValue;
var sqlValue = new SqlDateTime();
if (value.HasValue) sqlValue = value.Value;
return sqlValue;
}但是转换似乎稍微改变了日期,所以我的测试总是失败。
有人知道为什么这个方法会转换成错误的吗?
在该方法的末尾,看起来到SqlDateTime的转换进行了一些舍入:
value.Value.Ticks: 634698391707468296
sqlValue.Value.Ticks: 634698391707470000发布于 2012-04-12 12:57:34
可以- SQL Server DATETIME的精度为3.33ms -但是,.NET数据类型可以表示单个毫秒。
因此,您有时会遇到一些舍入问题。
在这里阅读更多关于DATETIME数据类型及其属性和怪癖的信息:
Demystifying the SQL Server DATETIME datatype
此外,SQL Server 2008还引入了大量与日期相关的新数据类型-请单击此处了解更多信息:
SQL Server 2008 New DATETIME datatypes
这些类型包括精确到100 is的DATETIME2数据类型。
发布于 2012-04-12 13:00:17
这是记录的TSQL date-time的精度-请参阅this link from MSDN上标题为“日期时间分数秒精度的舍入”一节。引述自该部分:
日期时间值四舍五入为.000、.003或.007秒的增量,如下表所示。
.NET date-time具有更高的精度。
此外,微软建议使用较新的数据类型(如datetime2、date、time等)而不是date-time。Sql Server2008引入的数据类型datetime2具有类似的精度(100 as )(与.NET日期/时间结构相同),它还支持ISO8601字符串格式,这将使从.NET日期/时间到SQL日期-时间的转换更简单(即,当您被迫使用文字而不是参数化查询时),并且没有损失。
发布于 2012-04-12 13:03:40
SqlDateTime对象的精度低于.NET DateTime对象,因此当转换为SQL时,它将失去一些精度。
https://stackoverflow.com/questions/10117570
复制相似问题