首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DateTime转换为SqlDateTime不准确

从DateTime转换为SqlDateTime不准确
EN

Stack Overflow用户
提问于 2012-04-12 12:55:51
回答 3查看 2.2K关注 0票数 8

我有一个从源( DataRowSqlDataReader)获取date属性的方法:

代码语言:javascript
复制
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的转换进行了一些舍入:

代码语言:javascript
复制
value.Value.Ticks:        634698391707468296
sqlValue.Value.Ticks:     634698391707470000
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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数据类型。

票数 9
EN

Stack Overflow用户

发布于 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日期-时间的转换更简单(即,当您被迫使用文字而不是参数化查询时),并且没有损失。

票数 3
EN

Stack Overflow用户

发布于 2012-04-12 13:03:40

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10117570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档