Rust Snippets

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.

Current Unix timestamp (seconds)
use std::time::{SystemTime, UNIX_EPOCH};

let ts = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_secs();
Current Unix timestamp (milliseconds)
use std::time::{SystemTime, UNIX_EPOCH};

let ms = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_millis();
With the chrono crate
// Cargo.toml: chrono = "0.4"
use chrono::Utc;

Utc::now().timestamp()         // seconds
Utc::now().timestamp_millis()  // milliseconds
Format with chrono
use 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.