Travailler avec les dates en Rust : aperçu des bibliothèques pour le temps et le calendrier

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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

Recommendations