在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纳秒间隔,但我不明白为什么会影响此计算。
答案 0 :(得分:3)
通过向UNIX_EPOCH
添加SystemTime
(一个Duration
),您最终获得了SystemTime
。
Windows-specific implementation的sys::time::SystemTime
基于Windows FILETIME
结构。
此结构has 100 nanosecond granularity:
包含一个64位值,表示自1601年1月1日(UTC)以来100纳秒间隔的数量。
大概FILETIME
的选择是因为这是Windows世界中普遍存在的时间类型,它提供了良好的性能和功能组合。