2
のWindows 10の64ビットで次のプログラムを実行している:Windowsでtime :: Durationのナノ秒値が100の最も近い倍数になるのはなぜですか?
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ナノ秒間隔で表されますが、この計算に影響する理由はわかりません。
私はRustを知りませんが、ソースを熟読すると、 'UNIX_EPOCH'はSystemTimeです。Windowsの場合は' libstd/sys/windows/time.rs'に実装されています。 'add_duration'の実装は' dur2intervals'を呼び出します。これは明示的に[ナノ秒を100で割る](https://github.com/rust-lang/rust/blob/b1363a73ede57ae595f3a1be2bb75d308ba4f7f6/src/libstd/sys/windows/time.rs #L177)この問題を回避するには、追加する前にUNIX_EPOCHをインスタントに変換することがありますが、私は自分の深みを欠いています。 –
@ Jordanもしそれが "錆を知らない"人の反応なら、あなたはいくつかの錆をやり始めなければならない!よく知られていないプログラミング言語のソースを熟読し、正解を得ることは難しいスキルです。 – Shepmaster
@Shepmasterありがとう!実際に私はたくさんのRustの本を読んできました(私はそのようなオタクだから)、それはしばらくの間、私の学ぶべきリストのトップにいました。 –