Travailler avec les dates en C# (.NET) : aperçu complet des bibliothèques et outils intégrés
Le traitement des dates et des heures est l'une des tâches les plus courantes en développement. Dans l'écosystème C# (.NET), il existe à la fois une fonctionnalité intégrée puissante (System.DateTime) et des bibliothèques tierces qui simplifient les scénarios complexes : gestion des fuseaux horaires, formatage, intervalles et analyse syntaxique. Dans cet article, nous allons passer en revue les principaux outils, y compris les fonctionnalités modernes de .NET 6+ et les packages NuGet populaires.
1. Outils intégrés : DateTime, DateOnly, TimeOnly
La classe de base System.DateTime est disponible depuis les premières versions de .NET. Elle prend en charge :
- Création d'une date :
new DateTime(2025, 3, 15) - Arithmétique :
date.AddDays(10),date.AddMonths(-1) - Comparaison :
date1 > date2 - Formatage :
date.ToString("yyyy-MM-dd")
À partir de .NET 6, les types DateOnly et TimeOnly sont apparus — ils ne sont pas liés à un fuseau horaire et stockent uniquement la date ou uniquement l'heure. Cela est pratique pour les anniversaires, les horaires de travail et les emplois du temps.
using System;
DateOnly birthday = new DateOnly(1990, 5, 20);TimeOnly alarm = new TimeOnly(7, 30);
Console.WriteLine($"Date : {birthday}, Heure : {alarm}");// Affichage : Date : 20.05.1990, Heure : 07:302. TimeSpan — intervalles de temps
Pour travailler avec des intervalles de temps, on utilise TimeSpan. Il permet de calculer la différence entre des dates, la durée des opérations et les délais d'attente.
DateTime start = DateTime.Now;// ... exécution du code ...DateTime end = DateTime.Now;
TimeSpan elapsed = end - start;Console.WriteLine($"Écoulé : {elapsed.TotalSeconds} sec.");3. Noda Time — travail avancé avec les dates
Noda Time (NuGet : NodaTime) est une bibliothèque de Jon Skeet (auteur d'un livre populaire sur C#). Elle résout les problèmes de DateTime :
- Séparation claire entre « l'instant dans le temps » (
Instant), « la date dans le calendrier » (LocalDate) et « l'heure avec fuseau horaire » (ZonedDateTime). - Prise en charge des calendriers (islamique, hébraïque, japonais).
- Immutabilité de tous les types.
- Traitement correct des fuseaux horaires via la base de données IANA (tzdata).
using NodaTime;
Instant now = SystemClock.Instance.GetCurrentInstant();DateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(zone);
Console.WriteLine($"Heure actuelle à Moscou : {moscowTime:yyyy-MM-dd HH:mm}");
// Travail avec LocalDateLocalDate today = LocalDate.FromDateTime(DateTime.Today);LocalDate nextWeek = today.PlusDays(7);Noda Time est particulièrement utile dans les projets où la précision des fuseaux horaires est critique (journaux, réservations, systèmes internationaux).
4. Humanizer — dates lisibles par l'humain
Humanizer (NuGet : Humanizer.Core) est une bibliothèque pour convertir les nombres, les dates et les heures en langage naturel. Elle peut :
- Afficher le temps relatif : "il y a 3 minutes", "dans 2 jours".
- Décliner les noms des mois et des jours de la semaine.
- Formater les intervalles de temps : "1 heure 30 minutes".
using Humanizer;
DateTime pastDate = DateTime.UtcNow.AddHours(-5);Console.WriteLine(pastDate.Humanize()); // "il y a 5 heures"
TimeSpan span = new TimeSpan(2, 45, 0);Console.WriteLine(span.Humanize()); // "2 heures 45 minutes"Humanizer prend en charge la localisation (langue russe — Humanizer.Core.ru).
5. FluentDateTime — interface fluide pour DateTime
FluentDateTime (NuGet : FluentDateTime) — ajoute des méthodes d'extension pour une utilisation plus fluide
Aussi dans la bibliothèque
Configuration des applications TypeScript : bibliothèques et outils
Biometric Kotlin : guide complet avec exemples pratiques