Travailler avec les dates en Rust : aperçu des bibliothèques clés
L'écosystème Rust propose plusieurs bibliothèques puissantes pour travailler avec les dates et l'heure. Contrairement à Python avec son module intégré datetime, la bibliothèque standard de Rust ne fournit qu'une fonctionnalité minimale (std::time::Instant et Duration), ce qui oblige à utiliser des crates externes pour les tâches sérieuses. Dans cet article, nous examinerons trois bibliothèques principales : Chrono, Time et Jiff.
1. Chrono — le standard de facto
Chrono est la bibliothèque la plus populaire (plus de 100 millions de téléchargements). Elle fournit un ensemble complet d'outils pour travailler avec les dates, l'heure, les fuseaux horaires et le formatage.
Fonctionnalités principales :
NaiveDate,NaiveDateTime— dates et heures sans fuseau horaireDateTime<Tz>— date-heure avec fuseau horaire- Prise en charge de
Durationet des opérations arithmétiques - Formatage via
format!et analyse de chaînes - Travail avec les calendriers (grégorien, ISO)
Exemple de code :
use chrono::{DateTime, Utc, NaiveDate, Duration};
fn main() { // Heure actuelle en UTC let now: DateTime<Utc> = Utc::now(); println!("Heure actuelle : {}", now.format("%Y-%m-%d %H:%M:%S"));
// Création d'une date spécifique let date = NaiveDate::from_ymd_opt(2025, 3, 15).unwrap(); println!("Date : {}", date);
// Arithmétique avec les dates let future = now + Duration::days(30); println!("Dans 30 jours : {}", future.format("%d.%m.%Y"));
// Analyse d'une chaîne let parsed = "2025-01-01 12:00:00" .parse::<DateTime<Utc>>() .expect("Format de date invalide"); println!("Analysé : {}", parsed);}Chrono convient parfaitement à la plupart des projets, mais peut être excessif si seule une fonctionnalité de base est nécessaire.
2. Time — une alternative moderne
La crate Time (développeur Jacob Pratt) se positionne comme un remplacement plus sûr et plus ergonomique de Chrono. Elle utilise un typage strict et évite les paniques à l'exécution.
Différences clés :
- Toutes les opérations retournent un
Result— pas de paniques cachées - Système de types plus strict : types distincts pour les dates, heures, décalages
- Prise en charge intégrée d'ISO 8601 et RFC 3339
- Taille plus petite et compilation plus rapide
Exemple de code :
use time::{Date, Month, OffsetDateTime, Duration, format_description};
fn main() -> Result<(), time::Error> { // Heure actuelle let now = OffsetDateTime::now_utc(); println!("Maintenant : {}", now);
// Création d'une date (sans panique) let date = Date::from_calendar_date(2025, Month::March, 15)?; println!("Date : {}", date);
// Arithmétique let week_later = now + Duration::weeks(1); println!("Dans une semaine : {}", week_later);
// Analyse avec format explicite let format = format_description::parse("[year]-[month]-[day]")?; let parsed = Date::parse("2025-12-31", &format)?; println!("Analyse : {}", parsed); Ok(())}Time est un excellent choix pour les nouveaux projets où la sécurité et la prévisibilité sont importantes.
3. Jiff — le dernier venu
Jiff (de BurntSushi, créateur de regex et ripgrep) est la bibliothèque la plus récente (sortie en 2024). Elle se concentre sur le travail avec les fuseaux horaires et l'internationalisation.
Caractéristiques :
- Base de données de fuseaux horaires intégrée (IANA)
- Prise en charge de calendriers non standard (islamique, hébraïque, etc.)
- Travail avancé avec les intervalles et les périodes
- Haute performance grâce aux calculs paresseux
Exemple de code :
Aussi dans la bibliothèque
Travailler avec Excel en C# (.NET) : bibliothèques EPPlus, ClosedXML et NPOI
Frameworks CLI pour C# (.NET) : création d'applications console
Génération de PDF en TypeScript : bibliothèques, outils et exemples de code
Surveillance des applications PHP avec Prometheus : la bibliothèque promphp/prometheus_client_php
Bibliothèque standard C# (.NET) : aperçu complet des fonctionnalités
Recommendations
Aussi dans la bibliothèque
Travailler avec Excel en C# (.NET) : bibliothèques EPPlus, ClosedXML et NPOI
Génération de PDF en TypeScript : bibliothèques, outils et exemples de code