我有一个从源(DataRow
或 SqlDataReader
)获取日期属性的方法:
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 Server DATETIME
的精度为 3.33 毫秒 - 但是 .NET 数据类型可以表示单毫秒。
因此,您有时会遇到一些舍入问题。
在此处阅读更多关于 DATETIME
数据类型及其属性和怪癖的信息:
Demystifying the SQL Server DATETIME datatype
此外,SQL Server 2008 引入了大量新的与日期相关的数据类型 - 在此处阅读更多相关信息:
SQL Server 2008 New DATETIME datatypes
这些类型确实包括一个 DATETIME2
数据类型,它精确到 100ns。
关于c# - 从 DateTime 转换为 SqlDateTime 不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10117570/