为什么 a 的最小分辨率DateTime
基于 Ticks(100 纳秒单位)而不是毫秒?
5 回答
TimeSpan
并DateTime
使用相同的Ticks
制作操作,例如将 a 添加TimeSpan
到DateTime
琐碎中。精度越高越好。主要用于
TimeSpan
,但以上原因将其转为DateTime
。例如,
StopWatch
测量短时间间隔通常短于一毫秒。它可以返回一个TimeSpan
.
在我的一个项目中,我曾经TimeSpan
处理音频样本。100ns 已经足够短了,毫秒不会。即使使用毫秒刻度,您也需要一个 Int64 来表示
DateTime
. 但是你浪费了大部分范围,因为 0 到 9999 之外的年份并没有真正有用。所以他们选择了尽可能小的刻度,同时允许DateTime
代表 9999 年。大约有 2 个61.5滴答,时间为 100ns。由于
DateTime
时区相关标记需要两个位,因此 100ns 滴答是适合 Int64 的最小十次方间隔。
因此,使用较长的刻度会降低精度,而不会获得任何收益。使用较短的刻度不适合 64 位。=> 100ns 是给定约束的最佳值。
以获得更高的时间分辨率,即使您大部分时间都不需要它。
仅供参考:
1 毫秒 = 10 000 个滴答声
1 秒 = 10 000 000 个滴答声
使用两个刻度的差异(增量),您可以获得更精细的精度(稍后将它们转换为毫秒或秒)
在 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
系统时间滴答每天增加 8640 亿滴答。
滴答声是系统时钟的工作方式。