根据msdn DateTime,精度为10 ms。因此,下面示例中的t2-t1
精度也是10 ms。然而,返回的值是“双倍”,令人困惑。
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值,因为当精度为10 ms时,double值没有意义。我需要在Thread.Sleep()中使用结果值。我应该转换为int吗?
答案 0 :(得分:7)
DateTime
本身的精度低至刻度线。
DateTime.Now
的粒度通常为10或15ms - 它是系统时钟的粒度。 (这并不意味着时钟准确到最近的10或15ms,请注意。)DateTime
上的减法运算符不应该知道或关心它 - 结果是只有一个TimeSpan
,它再次具有刻度级别的精度。
只需转换为int
就可以了。
(顺便说一句,你可能想阅读Eric Lippert's blog post。)