Ce face Duration::as_secs
as_secs() returnează numărul de secunde întregi: partea fracționară este tăiată, nu rotunjită (1.9 s dă 1). as_millis() dă tot intervalul în milisecunde, ca u128; există și as_micros(), as_nanos(). as_secs_f64() dă secundele ca număr zecimal.
Pentru doar partea de sub o secundă există subsec_millis(), subsec_micros() și subsec_nanos(). Pentru afișări pentru oameni, {:?} sau {:.2?} sunt de obicei suficiente.
Ce returnează
as_secs: u64. as_millis: u128. as_secs_f64: f64.
Exemple
Exemplul 1: Aceeași durată, în unități diferite
use std::time::Duration;
fn main() {
let d = Duration::from_millis(1950);
println!("as_secs: {}", d.as_secs());
println!("as_millis: {}", d.as_millis());
println!("as_micros: {}", d.as_micros());
println!("as_secs_f64: {}", d.as_secs_f64());
println!("subsec_millis: {}", d.subsec_millis());
println!("Debug rotunjit: {:.1?}", d);
}
Rezultat
as_secs: 1
as_millis: 1950
as_micros: 1950000
as_secs_f64: 1.95
subsec_millis: 950
Debug rotunjit: 2.0s
Exemplul 2: Ore, minute și secunde
Formatăm durata unui film sau a unei curse ca hh:mm:ss.
use std::time::Duration;
fn format_hms(d: Duration) -> String {
let s = d.as_secs();
format!("{:02}:{:02}:{:02}", s / 3600, (s % 3600) / 60, s % 60)
}
fn main() {
let maraton = Duration::from_secs(3 * 3600 + 27 * 60 + 5);
let film = Duration::from_secs(5400);
println!("maraton: {}", format_hms(maraton));
println!("film: {} ({:.1} ore)", format_hms(film), film.as_secs_f64() / 3600.0);
let km = 42.195;
let ritm = maraton.as_secs_f64() / km;
println!("ritm: {}:{:02} min/km", (ritm / 60.0) as u64, (ritm % 60.0) as u64);
}
Rezultat
maraton: 03:27:05
film: 01:30:00 (1.5 ore)
ritm: 4:54 min/km
Greșeli frecvente
- Folosești
as_secs()pentru durate scurte și primești 0: tăie partea fracționară. Foloseșteas_millis()sauas_secs_f64(). - Pui rezultatul lui
as_millis()într-unu64fără conversie: tipul esteu128. Scrieas u64sauu64::try_from(...).
Comenzi înrudite
Duration: O durată de timp (secunde și nanosecunde), creată cu from_secs, from_millis; se poate aduna, înmulți și compara.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.SystemTime: Ora sistemului (ceasul din calendar); diferența față de UNIX_EPOCH dă timestamp-ul Unix în secunde.