为什么DateTime基于tick而不是毫秒?



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

  • TimeSpanDateTime使用相同的Ticks,使得将TimeSpan添加到DateTime的操作变得微不足道。
  • 精度越高越好主要用于TimeSpan,但上述原因将其转移到DateTime

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

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

    约有261.5刻度为100ns。由于DateTime需要两个比特来进行时区相关的标记,因此100ns刻度是适合Int64的最小的10次幂间隔。

所以使用更长的刻度会降低精度,没有任何收获。使用更短的刻度不适合64位。

From MSDN;

一个滴答声代表一百纳秒或千万分之一等一下。一毫秒有10,000个节拍。

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

也可以是默认的CLS实现

仅供参考:

1毫秒= 10000秒

1秒= 10 000 000秒

使用两个节拍的差值(delta)可以获得更细粒度的精度(稍后将其转换为毫秒或秒)

在c# DateTime上下文中,ticks从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亿次。

可以获得更高的时间分辨率,尽管大多数情况下您并不需要它

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

相关内容

  • 没有找到相关文章

最新更新