21

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

4

5 回答 5

45
  • TimeSpanDateTime使用相同的Ticks制作操作,例如将 a 添加TimeSpanDateTime琐碎中。
  • 精度越高越好。主要用于TimeSpan,但以上原因将其转为DateTime

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

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

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

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

于 2013-01-19T15:04:25.633 回答
4
于 2013-01-19T15:00:06.290 回答
2

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

于 2013-01-19T14:56:28.923 回答
1

仅供参考:

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 亿滴答。

于 2020-07-09T22:12:30.890 回答
-5

滴答声是系统时钟的工作方式。

于 2013-01-19T14:56:48.547 回答