时间戳准确度 - 获得毫秒

时间:2013-06-12 10:21:08

标签: sql-server nhibernate

如果我使用这个流畅的nhibernate映射在SQL中存储System.DateTime作为时间戳:

Map(x => x.LoggedTimeStamp).CustomType("Timestamp")
                           .Not.Nullable();

当我存储并调用时间戳时:

new DateTime(2013, 5, 10, 14, 59, 13, 235);

它回来等于new DateTime(2013, 5, 10, 14, 59, 13, 237);

它增加了2毫秒。这在SQL Server管理工作室中也很明显。

我的问题是,我可以告诉NHibernate使用更准确的字段类型吗?

2 个答案:

答案 0 :(得分:8)

这是SQL-Server标准datetime类型的限制。

  

舍入为.000,.003或.007秒的增量

仅在SQL Server 2012 2008及更高版本中有更准确的日期时间类型。我不知道你是否可以让NHibernate使用它们(它肯定会破坏可移植性)。

或者,如果此精度非常重要,您可以将日期时间值保存为数字甚至字符串,在NHibernate类型转换器中进行转换。我曾经做过类似的事情(有人使用的是MySQL的日期),但是很久以前我不知道这种方法是否仍然有效。阅读NHibernate关于自定义数据类型的文档。

答案 1 :(得分:3)

SQL Serve中的

Datetime数据类型存储精度为3ms的数据:存储的值可能为+/- 3 ms。

使用datetime2数据类型。它的精度为100纳秒。

在SQL 2008及更高版本中,timedatetimeoffset数据类型的精度也为100纳秒。