Travail avec les dates en C# (.NET) : aperçu des bibliothèques et des outils intégrés

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

Travail avec les dates en C# (.NET) : des outils intégrés aux bibliothèques spécialisées



Le travail avec les dates et l'heure est l'une des tâches clés dans le développement de toute application : des services web aux utilitaires de bureau. La plateforme .NET fournit des outils intégrés puissants, tels que DateTime, DateTimeOffset et TimeSpan. Cependant, dans des scénarios complexes (gestion des fuseaux horaires, intervalles lisibles par l'homme, analyse de formats non standard), les développeurs se tournent souvent vers des bibliothèques tierces. Dans cet article, nous allons passer en revue les principaux outils pour travailler avec les dates en C#.



1. Outils intégrés .NET



Types de base pour le travail avec les dates dans .NET :



  • DateTime — représente un moment dans le temps (date + heure). Prend en charge les opérations d'addition, de soustraction et de comparaison.
  • DateTimeOffset — analogue de DateTime, mais avec un décalage explicite par rapport à UTC. Recommandé pour le stockage des dates dans les systèmes distribués.
  • TimeSpan — intervalle de temps (par exemple, 2 heures 30 minutes).
  • DateOnly et TimeOnly (depuis .NET 6) — pour le stockage séparé de la date et de l'heure sans données superflues.


Exemple d'utilisation de DateTime :

using System;

DateTime now = DateTime.Now;DateTime utcNow = DateTime.UtcNow;DateTime specificDate = new DateTime(2025, 3, 15, 14, 30, 0);

// Formatagestring formatted = now.ToString("dd.MM.yyyy HH:mm:ss");Console.WriteLine(formatted); // 15.03.2025 14:30:00

// ArithmétiqueDateTime tomorrow = now.AddDays(1);TimeSpan diff = tomorrow - now;Console.WriteLine($"Jusqu'à demain : {diff.TotalHours} heures");


Analyse des dates à partir de chaînes :

string dateStr = "2025-03-15";if (DateTime.TryParse(dateStr, out DateTime result)){    Console.WriteLine(result.ToShortDateString());}

// Analyse avec indication de la culturevar culture = new System.Globalization.CultureInfo("ru-RU");DateTime parsed = DateTime.Parse("15 марта 2025", culture);


2. Noda Time — travail avancé avec les dates et l'heure



Noda Time — une bibliothèque alternative de la communauté, créée pour pallier les lacunes du DateTime intégré. Principales caractéristiques :



  • Séparation claire des concepts : Instant (moment en UTC), LocalDateTime (date+heure sans liaison à un fuseau), ZonedDateTime (avec fuseau horaire).
  • Prise en charge complète des fuseaux horaires via la base de données IANA (Olson).
  • Types immuables (immutable) — sûrs dans le code multithread.
  • Intervalles lisibles par l'homme (Period) : 2 ans, 3 mois, 5 jours.


Exemple de travail avec Noda Time :

using NodaTime;using NodaTime.Text;

// Moment actuel en UTCInstant now = SystemClock.Instance.GetCurrentInstant();Console.WriteLine($"Instant : {now}");

// Conversion en heure locale avec fuseau horaireDateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(zone);Console.WriteLine($"Heure à Moscou : {moscowTime}");

// Analyse d'une date dans un format spécifiquevar pattern = LocalDatePattern.CreateWithInvariantCulture("yyyy-MM-dd");LocalDate date = pattern.Parse("2025-03-15").Value;Console.WriteLine(date); // 15 mars 2025

// Travail avec les périodesLocalDate start = new LocalDate(2025, 1, 1);LocalDate end = new LocalDate(2025, 12, 31);Period period = Period.Between(start, end, PeriodUnits.Days);Console.WriteLine($"Jours entre les dates : {period.Days}");


3. Humanizer — dates et intervalles lisibles par l'homme



Humanizer — une bibliothèque pour convertir des nombres, des dates et des chaînes en un format lisible par l'homme. Dans le contexte des dates, e

Recommendations