为什么DateTime
的最小分辨率基于Ticks(100纳秒单位)而不是毫秒?
答案 0 :(得分:30)
TimeSpan
和DateTime
使用相同的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)
勾号是系统时钟的工作原理。