Travail avec les dates en Rust : aperçu des bibliothèques clés
Rust est un langage de programmation système qui accorde une grande importance à la sécurité et aux performances. Cependant, le travail avec les dates et l'heure est toujours une tâche complexe en raison des fuseaux horaires, des secondes intercalaires et des formats. Dans l'écosystème Rust, il existe plusieurs bibliothèques matures qui résolvent ces problèmes. Dans cet article, nous examinerons trois bibliothèques principales : chrono, time et jiff, et montrerons comment les utiliser en pratique.
1. Chrono — le standard principal
chrono est la bibliothèque la plus populaire pour le travail avec les dates en Rust. Elle fournit un ensemble complet d'outils : analyse, formatage, arithmétique des dates, gestion des fuseaux horaires et sérialisation via serde.
Installation via Cargo.toml :
[dependencies]chrono = { version = "0.4", features = ["serde"] }Exemple d'utilisation de base :
use chrono::{NaiveDate, NaiveDateTime, Duration, Utc, Local};
fn main() { // Date et heure actuelles en UTC let utc_now = Utc::now(); println!("Maintenant en UTC : {}", utc_now.format("%Y-%m-%d %H:%M:%S"));
// Heure locale let local_now = Local::now(); println!("Heure locale : {}", local_now.format("%d.%m.%Y %H:%M"));
// Création d'une date spécifique let date = NaiveDate::from_ymd_opt(2025, 3, 14).unwrap(); println!("Date : {}", date);
// Arithmétique des dates let next_week = date + Duration::days(7); println!("Dans une semaine : {}", next_week);
// Analyse d'une chaîne let parsed = NaiveDateTime::parse_from_str( "2025-12-31 23:59:59", "%Y-%m-%d %H:%M:%S" ).unwrap(); println!("Analysé : {}", parsed);}2. Bibliothèque Time — une alternative moderne
time est une bibliothèque plus récente et plus stricte, développée en tenant compte des erreurs de chrono. Elle propose une séparation claire entre les types : Date, Time, OffsetDateTime et PrimitiveDateTime. Elle prend en charge les macros pour une création pratique des dates.
Installation :
[dependencies]time = { version = "0.3", features = ["macros", "serde"] }Exemples :
use time::{Date, Time, OffsetDateTime, macros::datetime, Duration};
fn main() { // Heure actuelle let now = OffsetDateTime::now_utc(); println!("Maintenant : {}", now);
// Création d'une date via macro let meeting = datetime!(2025-06-15 14:30:00 +03:00); println!("Réunion : {}", meeting);
// Extraction des composants let date = meeting.date(); let time = meeting.time(); println!("Date : {}, Heure : {}", date, time);
// Calcul de la différence let deadline = datetime!(2025-12-31 00:00:00 UTC); let diff = deadline - now; println!("Jusqu'à la date limite : {} jours", diff.whole_days());
// Formatage let formatted = now.format( &time::format_description::well_known::Rfc3339 ).unwrap(); println!("RFC 3339 : {}", formatted);}Important : La bibliothèque time fait partie de l'organisation officielle Rust et est considérée comme plus sûre car elle évite les paniques dans la plupart des méthodes (elle utilise Result).
3. Jiff — la nouvelle étoile
jiff est une bibliothèque relativement nouvelle qui se concentre sur l'ergonomie et les performances. Sa principale caractéristique est la détection automatique du fuseau horaire et la prise en charge intégrée des calendriers (grégorien, islamique, juif).
Installation :
[dependencies]jiff = "0.1"Exemple d'utilisation :
use jiff::{Zoned, Timestamp, Unit};
fn main() { // Heure actuelle avec fuseau horaire let now = Zoned::now(); println!("Heure actuelle : {}", now);
// Création à partir d'un timestamp let ts = Timestamp::new(1_700_000_000, 0 Aussi dans la bibliothèque
Autorisation et authentification en PHP : Guide complet avec exemples
Jetons JWT en C++ : implémentation et vérification avec jwt-cpp
Journalisation pour Kotlin : meilleures solutions et bibliothèques
Envoi d'email en Swift (iOS/macOS) : MFMailComposeViewController et SMTP
neverthrow TypeScript : guide complet avec exemples