Travailler avec les dates en Rust : aperçu des bibliothèques de gestion du temps

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 : 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 horaire
  • DateTime<Tz> — date-heure avec fuseau horaire
  • Prise en charge de Duration et 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 :

Recommendations