2011-12-12 92 views
4

根据msdn日期时间精度为10毫秒。所以t2-t1在下面的例子中的精度也是10毫秒。然而,返回的值是“双”,令人困惑。如何计算ms中两个DateTime之间的差异?

DateTime t1 = DateTime.Now; // precision is 10 ms 
.... 
DateTime t2 = DateTime.Now; // precision is 10 ms 
... (t2-t1).TotalMilliseconds; // double (so precision is less than 1 ms???) 

我期待int值,因为double值在精度为10 ms时没有意义。我需要在Thread.Sleep()中使用结果值。我应该只是投到int?

+0

这只是我的好奇心。哪种情况需要变量睡眠? – 2011-12-12 08:24:20

+0

qos - 限制吞吐量 – javapowered

回答

7

DateTime本身的精度低于tick值。

DateTime.Now的粒度通常为10或15ms--这是系统时钟的粒度。 (这并不意味着时钟是准确精确到10或15ms,请注意。)DateTime上的减法运算符不应该知道或关心 - 尽管如此 - 结果只是一个TimeSpan,它的精度仍然是勾号级别。

只要铸造到int应该是绝对好的。

(您可能需要阅读本Eric Lippert's blog post,顺便说一句。)

相关问题