Introduction : Pourquoi travailler avec les dates et l'heure en C# est essentiel pour tout développeur
\nChaque développeur C# rencontre tôt ou tard la nécessité de traiter les dates et l'heure. Que ce soit pour la journalisation d'événements, le calcul de délais dans une application métier ou simplement l'affichage de la date actuelle à l'écran — une maîtrise solide de DateTime et TimeSpan est indispensable. Dans cet article, nous aborderons tous les aspects clés : de la création d'objets à la gestion des fuseaux horaires et des performances. Le contenu convient aussi bien aux débutants qu'aux programmeurs expérimentés souhaitant systématiser leurs connaissances.
Types principaux pour travailler avec la date et l'heure dans .NET
\nDans .NET, il existe plusieurs types, chacun répondant à un besoin spécifique. Examinons les principaux.
\n\nDateTime — la base de tout
\nDateTime est une structure représentant un instant (date et heure). Elle prend en charge une plage allant du 01.01.0001 au 31.12.9999. Créer un objet peut se faire de plusieurs manières :
// Date et heure actuelles\nDateTime now = DateTime.Now;\n// Date et heure actuelles en UTC\nDateTime utcNow = DateTime.UtcNow;\n// Date spécifique\nDateTime specificDate = new DateTime(2025, 3, 15);\n// Date et heure avec précision à la seconde\nDateTime withTime = new DateTime(2025, 3, 15, 14, 30, 0);\n// Date d'aujourd'hui (heure 00:00:00)\nDateTime today = DateTime.Today;\n\nTimeSpan — intervalles de temps
\nTimeSpan représente un intervalle de temps (la différence entre deux dates). Il est pratique pour calculer la durée des opérations :
// Création d'un intervalle\nTimeSpan interval = new TimeSpan(2, 5, 30); // 2 heures, 5 minutes, 30 secondes\n// Différence entre dates\nDateTime start = DateTime.Now;\nSystem.Threading.Thread.Sleep(1000); // simulation de travail\nDateTime end = DateTime.Now;\nTimeSpan duration = end - start;\nConsole.WriteLine($"Il s'est écoulé {duration.TotalSeconds} secondes");\n\nDateTimeOffset — date avec fuseau horaire
\nPour les applications modernes travaillant avec des utilisateurs de différentes régions, DateTimeOffset est crucial. Il stocke la date et l'heure avec le décalage par rapport à UTC :
// Heure actuelle avec décalage local\nDateTimeOffset localOffset = DateTimeOffset.Now;\n// Heure avec un décalage spécifique\nDateTimeOffset customOffset = new DateTimeOffset(2025, 3, 15, 12, 0, 0, TimeSpan.FromHours(3));\n// Conversion en UTC\nDateTime utc = localOffset.UtcDateTime;\n\nFormatage et analyse des dates
\nL'affichage correct des dates à l'utilisateur et la lecture des données à partir de chaînes sont des compétences obligatoires.
\n\nFormatage : ToString() et modèles personnalisés
\nLa méthode ToString() accepte une chaîne de format. Les formats standards les plus populaires :
- \n
"d"— date courte (15.03.2025) \n "D"— date longue (15 mars 2025) \n "t"— heure courte (14:30) \n "T"— heure longue (14:30:00) \n "g"— format général date/heure (15.03.2025 14:30) \n
Exemples de formatage personnalisé :
\nDateTime dt = new DateTime(2025, 3, 15, 14, 30, 45);\nConsole.WriteLine(dt.ToString("yyyy-MM-dd")); // 2025-03-15\nConsole.WriteLine(dt.ToString("dd.MM.yyyy HH:mm")); // 15.03.2025 14:30\nConsole.WriteLine(dt.ToString("dddd, MMMM yyyy")); // samedi, mars 2025 (dépend de la culture)\n\nAnalyse : conversion d'une chaîne en date
\nPour une analyse fiable, utilisez DateTime.TryParse ou DateTime.ParseExact :
string dateString = "15.03.2025";\nif (DateTime.TryParse(dateString, out DateTime result))\n{\n Console.WriteLine($"Succès : {result}");\n}\nelse\n{\n Console.WriteLine("Erreur d'analyse");\n}\n\n// Analyse précise avec indication du format\nstring exactString = "2025-03-15 14:30:00";\nDateTime parsed = DateTime.ParseExact(exactString, "yyyy-MM-dd HH:mm