Extraits de timestamp Unix en Rust
Exemples Rust pour les secondes et millisecondes Unix actuelles, le formatage basé sur chrono et la conversion de valeurs epoch en chaînes UTC lisibles.
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"));Bases des horodatages en Rust
La bibliothèque standard expose SystemTime et UNIX_EPOCH pour des calculs d'horodatage sans dépendances. duration_since(UNIX_EPOCH) peut être lu en secondes, millisecondes, microsecondes ou nanosecondes.
Formater les horodatages en Rust
Pour des dates lisibles, beaucoup de projets Rust utilisent le crate chrono. Convertissez les secondes epoch en un DateTime UTC, puis formatez en RFC3339 ou en chaîne personnalisée pour les journaux et les interfaces utilisateur.
Notes de production pour Rust
La bibliothèque standard de Rust suffit pour mesurer des durées et lire le temps Unix, tandis que des crates comme chrono ou time conviennent mieux au formatage calendaire. Gardez la conversion faillible près de la gestion des entrées, car les horodatages externes peuvent être négatifs, trop grands ou exprimés dans la mauvaise unité.
- Utilisez as_secs() pour des secondes Unix standard depuis SystemTime
- Utilisez as_millis() pour des horodatages compatibles JavaScript
- Utilisez chrono ou time quand vous avez besoin d'analyse, de formatage tenant compte du fuseau ou de sortie RFC3339
- Validez l'unité des horodatages externes avant de les stocker dans des structs typées
FAQ
- SystemTime peut-il gérer les dates antérieures à 1970 ?
- SystemTime peut représenter des instants autour de l'epoch Unix, mais duration_since(UNIX_EPOCH) renvoie une erreur pour les instants antérieurs. Gérez ce cas si des horodatages externes peuvent être négatifs.
- Ai-je besoin de chrono pour chaque horodatage ?
- Non. La bibliothèque standard suffit pour les secondes et millisecondes Unix actuelles. Utilisez chrono ou time quand vous avez besoin d'analyse, de formatage ou de logique de calendrier.
- Comment vérifier les unités d'horodatage en Rust ?
- Convertissez un échantillon en RFC3339 avec chrono ou time, puis confirmez qu'il correspond au contrat de l'API ou de la base de données avant d'accepter le champ comme des secondes ou des millisecondes.