Frammenti di timestamp Unix in Rust
Esempi Rust per secondi e millisecondi Unix attuali, formattazione basata su chrono e conversione di valori epoch in stringhe UTC leggibili.
use std::time::{SystemTime, UNIX_EPOCH};
let ts = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_secs();use std::time::{SystemTime, UNIX_EPOCH};
let ms = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis();// Cargo.toml: chrono = "0.4"
use chrono::Utc;
Utc::now().timestamp() // seconds
Utc::now().timestamp_millis() // millisecondsuse chrono::{DateTime, TimeZone, Utc};
let dt: DateTime<Utc> = Utc.timestamp_opt(1700000000, 0).unwrap();
println!("{}", dt.to_rfc3339());
println!("{}", dt.format("%Y-%m-%d %H:%M:%S"));Basi dei timestamp in Rust
La libreria standard espone SystemTime e UNIX_EPOCH per calcoli di timestamp senza dipendenze. duration_since(UNIX_EPOCH) può essere letto come secondi, millisecondi, microsecondi o nanosecondi.
Formattare i timestamp in Rust
Per date leggibili, molti progetti Rust usano il crate chrono. Converti i secondi epoch in un DateTime UTC, poi formatta come RFC3339 o una stringa personalizzata per log e interfacce utente.
Note di produzione per Rust
La libreria standard di Rust basta per misurare durate e leggere il tempo Unix, mentre crate come chrono o time sono migliori per la formattazione di calendario. Tieni la conversione fallibile vicino alla gestione dell'input, perché i timestamp esterni possono essere negativi, troppo grandi o espressi nell'unità sbagliata.
- Usa as_secs() per secondi Unix standard da SystemTime
- Usa as_millis() per timestamp compatibili con JavaScript
- Usa chrono o time quando ti servono parsing, formattazione con fuso o output RFC3339
- Valida l'unità dei timestamp esterni prima di memorizzarli in struct tipizzate
FAQ
- SystemTime può gestire date precedenti al 1970?
- SystemTime può rappresentare istanti attorno all'epoch Unix, ma duration_since(UNIX_EPOCH) restituisce un errore per istanti precedenti. Gestisci quel caso se i timestamp esterni possono essere negativi.
- Mi serve chrono per ogni timestamp?
- No. La libreria standard è sufficiente per secondi e millisecondi Unix attuali. Usa chrono o time quando hai bisogno di parsing, formattazione o logica di calendario.
- Come verifico le unità di timestamp in Rust?
- Converti un valore campione in RFC3339 con chrono o time, poi conferma che corrisponda al contratto dell'API o del database prima di accettare il campo come secondi o millisecondi.