Ce face Duration
Duration reprezintă un interval de timp, mereu pozitiv, cu precizie de nanosecundă. Îl creezi cu Duration::from_secs(90), Duration::from_millis(1500), from_micros, from_nanos, from_secs_f64(2.5) sau Duration::new(secunde, nanosecunde).
Duratele se adună, se scad, se înmulțesc și se împart cu numere întregi (d * 3, d / 2) și se compară. Cu {:?} sunt afișate într-o formă ușor de citit (1.5s, 250ms). Scăderea care ar da rezultat negativ intră în panică; folosește checked_sub sau saturating_sub.
Funcțiile din std care așteaptă un timp (thread::sleep, recv_timeout, limitele de timp ale socket-urilor) primesc Duration.
Parametri
| Parametru | Descriere |
|---|---|
secs |
Numărul de secunde. |
millis |
Numărul de milisecunde. |
Ce returnează
O Duration.
Exemple
Exemplul 1: Creare, afișare și calcule
use std::time::Duration;
fn main() {
let pauza = Duration::from_secs(90);
let pas = Duration::from_millis(1500);
let precis = Duration::new(2, 250_000_000);
println!("{pauza:?}, {pas:?}, {precis:?}");
println!("sumă: {:?}", pauza + pas);
println!("de 4 ori: {:?}", pas * 4);
println!("jumătate: {:?}", pauza / 2);
println!("pas < precis: {}", pas < precis);
println!("from_secs_f64(0.75): {:?}", Duration::from_secs_f64(0.75));
}
Rezultat
90s, 1.5s, 2.25s
sumă: 91.5s
de 4 ori: 6s
jumătate: 45s
pas < precis: true
from_secs_f64(0.75): 750ms
Exemplul 2: Durata totală a unui playlist
Adunăm durate cu sum() și transformăm totalul în minute și secunde.
use std::time::Duration;
fn main() {
let melodii = [("Ciocârlia", 185), ("Hora unirii", 142), ("Doina", 263)];
let total: Duration = melodii.iter().map(|(_, s)| Duration::from_secs(*s)).sum();
let secunde = total.as_secs();
println!("{} melodii, {} min {} s", melodii.len(), secunde / 60, secunde % 60);
let ramas = total.checked_sub(Duration::from_secs(1000));
println!("mai rămân din 1000 s: {:?}", ramas);
println!("saturating: {:?}", Duration::from_secs(10).saturating_sub(total));
}
Rezultat
3 melodii, 9 min 50 s
mai rămân din 1000 s: None
saturating: 0ns
Greșeli frecvente
- Scrii
Duration::from_secs(0.5): nu compilează, pentru că primeșteu64. Foloseștefrom_millis(500)saufrom_secs_f64(0.5). - Scazi o durată mai mare dintr-una mai mică: panică
overflow when subtracting durations. Foloseștechecked_subsausaturating_sub.
Comenzi înrudite
Duration::as_secs: Transformă o durată în număr: secunde întregi (as_secs), milisecunde (as_millis) sau secunde cu zecimale (as_secs_f64).Instant: Un moment de timp măsurat de un ceas care doar crește; folosit pentru a măsura cât durează o operație.thread::sleep: Oprește firul curent cel puțin cât durata dată; celelalte fire continuă să ruleze.SystemTime: Ora sistemului (ceasul din calendar); diferența față de UNIX_EPOCH dă timestamp-ul Unix în secunde.