为什么DateTime基于Ticks而不是Milliseconds?

时间:2013-01-19 14:54:51

标签: c# .net vb.net datetime

为什么DateTime的最小分辨率基于Ticks(100纳秒单位)而不是毫秒?

5 个答案:

答案 0 :(得分:30)

  • TimeSpanDateTime使用相同的Ticks制作操作,例如将TimeSpan添加到DateTime琐碎。
  • 更精确是好的。主要对TimeSpan有用,但上述原因会将其转移到DateTime

    例如StopWatch测量通常短于一毫秒的短时间间隔。它可以返回TimeSpan 在我的一个项目中,我使用TimeSpan来处理音频样本。 100ns足够短,毫秒不会。

  • 即使使用毫秒刻度,您也需要Int64来表示DateTime。但是那时你浪费了大部分范围,因为0到9999之外的年份并没有真正有用。因此,他们选择尽可能小的刻度,同时允许DateTime代表9999年。

    大约有2个 61.5 蜱与100ns。由于DateTime需要两位用于与时区相关的标记,因此100ns滴答是适合Int64的最小十次幂间隔。

因此,使用更长的刻度将降低精度,而不会获得任何东西。使用较短的刻度不适合64位。 =>给定约束条件,100ns是最佳值。

答案 1 :(得分:3)

来自MSDN;

  

单个刻度表示一百纳秒或一千万分之一   一秒钟一毫秒内有10,000个滴答。

刻度表示当地时间的刻度总数,即0001年1月1日午夜。但刻度也是TimeSpan的最小单位。因为滴答是Int64,所以如果使用毫秒而不是滴答,则可能会丢失信息。

也可以是默认的CLS实施。

答案 2 :(得分:2)

获得更高的时间分辨率,即使您大部分时间都不需要它。

答案 3 :(得分:0)

仅供参考:

1毫秒= 10000次滴答声

1秒= 1千万个滴答声

使用两个刻度的差异(增量),您可以获得更高的精度(稍后将其转换为毫秒或秒)

在C#DateTime上下文中,滴答从0(DateTime.MinValue.Ticks)开始直到DateTime.MaxValue.Ticks

new DateTime(0)                          //numbers between 0 and (864*10^9-1) produces same date 01/01/0001        
new DateTime(DateTime.MaxValue.Ticks)    //MaxValue tick generates 12/31/9999
   

系统时间刻度每天增加8,640亿刻度。

答案 4 :(得分:-3)

勾号是系统时钟的工作原理。