为什么DateTime
的最小分辨率是基于Ticks(100纳秒单位)而不是毫秒?
-
TimeSpan
和DateTime
使用相同的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亿次。
可以获得更高的时间分辨率,尽管大多数情况下您并不需要它
滴答是系统时钟的工作方式。