Hvorfor er nanosekundens værdi af tid :: Varighed gulvet til nærmeste multiplum på 100 på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Når du kører følgende program på Windows 10 64-bit:


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);
}


Hvorfor er nanosekundens værdi gulvet til det nærmeste antal på 100?


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


Windows filtider er repræsenteret som intervaller på 100 nanosekunder, men jeg forstår ikke, hvorfor det ville påvirke denne beregning.

Bedste reference


Ved at tilføje UNIX\_EPOCH (a SystemTime) til din Duration, ender du med en SystemTime. [10] [11] [12]


Den Windows-specifikke implementering af sys::time::SystemTime er baseret på Windows FILETIME struct. [13] [14]


Denne struktur har 100 nanosekunder granularitet: [15]



  Indeholder en 64-bit værdi, der repræsenterer antallet af 100 nanosekunders intervaller siden 1. januar 1601 (UTC).



Formentlig er valget af FILETIME, fordi det er en pervasiv type til tiden i Windows verden, og den giver en god blanding af ydeevne og kapacitet.