Travailler avec les dates en Rust : bibliothèques pour le temps et le calendrier
Rust est un langage de programmation système moderne qui offre un typage strict et une sécurité mémoire. Cependant, la bibliothèque standard de Rust ne fournit que des moyens minimaux pour travailler avec les dates et l'heure. Pour une gestion complète des calendriers, des fuseaux horaires, du formatage et des calculs, les développeurs utilisent des crates tiers. Dans cet article, nous allons détailler trois bibliothèques principales : chrono, time et jiff, et fournir des exemples pratiques.
1. Bibliothèque chrono — le standard de facto
chrono est la bibliothèque la plus populaire pour travailler avec les dates en Rust. Elle offre une API riche pour la création, la manipulation et le formatage des dates et de l'heure. Les types principaux sont : NaiveDate, NaiveDateTime, DateTime (avec prise en compte du fuseau horaire) et Duration.
Installation
# Cargo.toml[dependencies]chrono = "0.4"Exemple : date et heure actuelles
use chrono::{Local, Utc};
fn main() { let now_utc = Utc::now(); let now_local = Local::now(); println!("UTC : {}", now_utc); println!("Locale : {}", now_local);}Exemple : analyse d'une chaîne et formatage
use chrono::NaiveDate;
fn main() { let date = NaiveDate::parse_from_str("2025-03-15", "%Y-%m-%d") .expect("Format de date invalide"); println!("Jour : {}", date.format("%d.%m.%Y"));}Avantages : immense communauté, support des fuseaux horaires via chrono-tz, gestion des intervalles et des durées.
Inconvénients : taille relativement importante, complexité lors de l'utilisation de calendriers non standard.
2. Bibliothèque time — une alternative légère
time est une bibliothèque plus moderne et légère, activement développée. Elle utilise un système de types strict pour éviter les erreurs (par exemple, séparation entre Date, Time, OffsetDateTime et PrimitiveDateTime).
Installation
[dependencies]time = "0.3"Exemple : création d'une date et calcul de la différence
use time::{Date, Month, Duration};
fn main() { let start = Date::from_calendar_date(2025, Month::March, 10).unwrap(); let end = Date::from_calendar_date(2025, Month::March, 20).unwrap(); let diff = end - start; println!("Différence : {} jours", diff.whole_days());}Exemple : formatage
use time::OffsetDateTime;use time::format_description::well_known::Rfc3339;
fn main() { let now = OffsetDateTime::now_utc(); let formatted = now.format(&Rfc3339).unwrap(); println!("RFC 3339 : {}", formatted);}Avantages : taille réduite, séparation claire des types, excellente documentation.
Inconvénients : moins d'exemples en ligne que pour chrono.
3. Bibliothèque jiff — pour les intervalles de haute précision
jiff est une bibliothèque spécialisée pour travailler avec les intervalles calendaires et les événements récurrents. Elle est utile pour les tâches de planification, les rappels et le calcul des jours ouvrables.
Installation
[dependencies]jiff = "0.1"Exemple : création d'un intervalle et vérification d'appartenance
use jiff::ZonedInterval;use jiff::tz::TimeZone;
fn main() { let tz = TimeZone::get("Europe/Moscow").unwrap(); let start = tz.to_zoned(2025, 3, 1, 0, 0, 0, 0).unwrap(); let end = tz.to_zoned(2025, 3, 31, 23, 59, 59, 0).unwrap(); let interval = ZonedInterval::new(start, end); let check = tz.to_zoned(2025, 3, 15, 12, 0, 0, 0).unwrap(); println!("Le 15 mars est-il dans l'intervalle ? {}", interval.contains(&check));}Avantages : pratique pour les calendriers
Aussi dans la bibliothèque
Travailler avec Excel en PHP : les bibliothèques PhpSpreadsheet et OpenSpout
Mise en cache en Rust : Redis, Memcached et solutions intégrées
Travail avec les dates en Swift (iOS/macOS) : bibliothèques et frameworks
Jetons JWT en Swift : Travailler avec JSON Web Token sur iOS/macOS