为什么time :: Duration的纳秒值在Windows上最接近100的倍数?

时间:2017-01-28 21:15:13

标签: windows time rust

在Windows 10 64位上运行以下程序时:

use std::time::{Duration, UNIX_EPOCH};

fn main() {
    let d = Duration::new(4660, 22136);
    let t = UNIX_EPOCH + d;
    let d2 = t.duration_since(UNIX_EPOCH).unwrap();
    println!("d: {:?}", d);
    println!("d2: {:?}", d2);
}

为什么纳秒值被抛到最接近的100倍?

d: Duration { secs: 4660, nanos: 22136 }
d2: Duration { secs: 4660, nanos: 22100 }

Windows文件时间表示为100纳秒间隔,但我不明白为什么会影响此计算。

1 个答案:

答案 0 :(得分:3)

通过向UNIX_EPOCH添加SystemTime(一个Duration),您最终获得了SystemTime

Windows-specific implementationsys::time::SystemTime基于Windows FILETIME结构。

此结构has 100 nanosecond granularity

  

包含一个64位值,表示自1601年1月1日(UTC)以来100纳秒间隔的数量。

大概FILETIME的选择是因为这是Windows世界中普遍存在的时间类型,它提供了良好的性能和功能组合。