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

为什么在Windows上,time::Duration的纳秒值是100的最接近倍数?,windows,time,rust,Windows,Time,Rust,在64位Windows 10上运行以下程序时: 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: {:?}", d

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

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:持续时间{secs:4660,nanos:22100}
Windows文件时间表示为100纳秒的间隔,但我不明白为什么这会影响此计算。

通过在文件中添加(a),您将得到一个
SystemTime

of基于Windows
FILETIME
struct

这一结构:

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


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

我不知道是否生锈,但仔细阅读源代码,似乎
UNIX\u EPOCH
是一种系统时间,对于Windows,它是在
libstd/sys/Windows/time.rs
中实现的。它实现了
add_duration
调用
dur2intervals
,这显然是一个解决办法,可以在进行加法之前将UNIX_EPOCH转换为一个瞬间,但我对此一无所知。@Jordan如果这是“不知道生锈”的人的反应,那么你需要开始做一些生锈!能够阅读一种不熟悉的编程语言的源代码并得到正确的答案是一项艰苦的技能。@Shepmaster谢谢!事实上,我读过很多关于铁锈的书(因为我是那种书呆子),而且它在我的学习清单上已经排在首位有一段时间了。