关于C# DateTime的微秒与纳秒取值范围的疑问
关于DateTime.Microsecond和Nanosecond取值范围的解释
核心原因是.NET中DateTime的底层时间精度单位是Tick,1个Tick等于100纳秒——这是设计时就固定的最小时间粒度,所有DateTime的时间值都是Tick的整数倍。
拆解各个属性的逻辑:
- Millisecond(0-999):1毫秒=10000 Tick(1ms=10^6纳秒 ÷ 100纳秒/Tick),所以毫秒数是总Tick数除以10000的余数再换算为毫秒,范围自然是0-999,符合常识。
- Microsecond(0-999):1微秒=10 Tick(1μs=10^3纳秒 ÷ 100纳秒/Tick)。计算时,先取总Tick数除以10000(1毫秒的Tick数)的余数,得到当前毫秒内的Tick数;再将这个余数除以10,得到的整数就是微秒数。因为余数范围是0-9999,除以10后整数部分就是0-999,所以Microsecond的范围是0-999。
- Nanosecond(0-900):由于Tick是100纳秒的整数倍,所以剩下的纳秒数只能是100的倍数。计算时,取当前毫秒内的Tick数除以10的余数,再乘以100得到纳秒数。余数范围是0-9,乘以100后就是0、100、200…900,所以Nanosecond的范围是0-900,步长为100。
简单说:DateTime无法表示100纳秒以下的精度,所以纳秒部分只能是100的倍数,最大到900(再多加100纳秒就凑成1微秒,会进位到Microsecond);而微秒部分则可以覆盖0-999,因为每10个Tick对应1微秒,一个毫秒内最多有999个完整微秒加900纳秒的余量。
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

