我有一个从源(aDataRow
或aSqlDataReader
)获取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
最佳答案
是-SQL ServerDATETIME
的精度为3.33ms,-.NET数据类型可表示单个毫秒。
因此,您有时会遇到一些舍入问题。
在这里阅读有关DATETIME
数据类型及其属性和特性的更多信息:
Demystifying the SQL Server DATETIME datatype
此外,SQL Server 2008引入了许多与日期相关的新数据类型—请阅读以下内容:
SQL Server 2008 New DATETIME datatypes
这些类型确实包含一个精确到100ns的DATETIME2
数据类型。