Introduction au travail avec les dates et l'heure en Rust
Le travail avec les dates et l'heure est l'une des tâches clés dans toute application moderne. Qu'il s'agisse de journalisation d'événements, de planification de tâches, de traitement de données utilisateur ou de travail avec des API — une gestion correcte des horodatages est indispensable. Dans le langage Rust, connu pour ses performances et sa sécurité, la bibliothèque standard ne fournit qu'un ensemble minimal d'outils pour travailler avec le temps. Cependant, la puissante crate chrono vient à la rescousse, étant devenue le standard de facto pour le travail avec les dates et l'heure dans l'écosystème Rust.
Dans cet article, nous allons détailler comment installer et utiliser chrono, comment créer, formater, analyser et manipuler des dates, ainsi que comment travailler avec les fuseaux horaires et les horodatages Unix.
Installation et connexion de la crate chrono
Pour commencer, il est nécessaire d'ajouter la dépendance chrono dans le fichier Cargo.toml de votre projet :
[dependencies]chrono = "0.4"Ensuite, vous pouvez importer les types et traits nécessaires dans le code :
use chrono::{DateTime, Utc, Local, NaiveDate, NaiveDateTime, Duration, Datelike, Timelike, TimeZone};La crate chrono propose plusieurs types clés pour représenter les dates et l'heure :
NaiveDate— une date sans heure ni fuseau horaire (par exemple, 2024-01-15).NaiveTime— une heure sans date ni fuseau horaire (par exemple, 14:30:00).NaiveDateTime— une combinaison de date et d'heure sans tenir compte du fuseau horaire.DateTime<Utc>— une date et une heure avec le fuseau horaire UTC.DateTime<Local>— une date et une heure avec le fuseau horaire local du système.DateTime<FixedOffset>— une date et une heure avec un décalage arbitraire par rapport à UTC.
Création et obtention de l'heure actuelle
La façon la plus simple d'obtenir l'instant présent est d'utiliser les fonctions Utc::now() et Local::now() :
use chrono::{Utc, Local};
fn main() { let utc_now: DateTime<Utc> = Utc::now(); let local_now: DateTime<Local> = Local::now(); println!("Heure actuelle UTC : {}", utc_now); println!("Heure locale actuelle : {}", local_now);}Pour créer une date spécifique, vous pouvez utiliser les méthodes NaiveDate::from_ymd et NaiveDateTime::new :
use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
fn main() { // Création de la date du 15 mars 2024 let date = NaiveDate::from_ymd(2024, 3, 15); println!("Date : {}", date); // Création de l'heure 10:30:00 let time = NaiveTime::from_hms(10, 30, 0); println!("Heure : {}", time); // Combinaison de date et d'heure let datetime = NaiveDateTime::new(date, time); println!("Date et heure : {}", datetime);}Vous pouvez également créer une date avec un fuseau horaire en utilisant la méthode and_hms sur une date :
use chrono::{Utc, TimeZone};
fn main() { let datetime_utc = Utc.ymd(2024, 12, 25).and_hms(12, 0, 0); println!("Noël UTC : {}", datetime_utc);}Formatage et analyse des dates
Formatage de la sortie
Pour convertir une date en chaîne de caractères, on utilise la méthode format, qui prend une chaîne de format en argument. Les spécificateurs de format sont similaires à ceux du langage Python et d'autres langages :
use chrono::{Utc, DateTime};
fn main() { let now = Utc::now(); // Formatage de base println!("Par défaut : {}", now.format("%Y-%m-%d %H:%M:%S")); println!("Date uniquement : {}", now.format("%d.%m.%Y")); println!("Avec le nom du mois : {}", now.format("%d %B %Y")); println!("Heure avec secondes : {}", now.format("%H:%M:%S")); println!("Unix timestam
```