Calcul de l'âge par date de naissance en C# : meilleures pratiques 2025

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

Quel âge as-tu ? Décortiquons l'âge en C# une fois pour toutes

\n\n

Quoi de plus simple, semble-t-il, que de prendre la date actuelle, soustraire la date de naissance et obtenir l'âge ? Mais tout développeur qui a déjà écrit un calcul d'âge en C# a rencontré un piège. Essayez simplement de soustraire les années — et vous obtiendrez une erreur le jour de l'anniversaire. Et que faire des années bissextiles ? Et des personnes nées le 29 février ?

\n\n

Cette question est un véritable succès sur Stack Overflow. Elle a accumulé des milliers de vues et des dizaines de réponses. Pourquoi ? Parce que calculer l'âge à partir d'une date de naissance en C# correctement est plus difficile qu'il n'y paraît. Dans cet article, nous ne nous contenterons pas de donner un code prêt à l'emploi. Nous analyserons les meilleures pratiques de 2025, vous apprendrons à éviter les pièges et vous montrerons comment écrire un code propre et fiable qui ne vous décevra pas en production.

\n\n

C'est parti ! 🚀

\n\n

Pourquoi la simple soustraction ne fonctionne-t-elle pas ? (Et comment y remédier)

\n\n

L'erreur la plus courante des débutants est d'utiliser une soustraction brute des années :

\n\n
int age = DateTime.Now.Year - birthday.Year;
\n\n

À première vue, c'est logique. Mais imaginez : nous sommes le 1er mars 2025, et l'utilisateur est né le 5 mars 2010. Selon cette logique, il a déjà 15 ans. Alors qu'en réalité, il en a encore 14. L'erreur vient du fait que nous n'avons pas vérifié si l'anniversaire est déjà passé dans l'année en cours.

\n\n

Le deuxième piège concerne les années bissextiles. Les personnes nées le 29 février, lors d'une année non bissextile, doivent fêter leur anniversaire le 28 février ou le 1er mars. Et votre code doit gérer cela correctement.

\n\n

Le troisième problème est que DateTime.Now dépend du fuseau horaire du serveur. Si votre serveur est en UTC et que l'utilisateur est né à Moscou, le calcul peut être erroné à la limite du jour.

\n\n

Bonne nouvelle : tous ces problèmes ont une solution. Et nous allons vous montrer comment.

\n\n

La meilleure façon de calculer l'âge en C# (Solution éprouvée)

\n\n

Après de longs débats sur Stack Overflow et de nombreux tests, la communauté est parvenue à un consensus. Voici la meilleure pratique pour le calcul de l'âge en C# en 2025 :

\n\n
public static int CalculateAge(DateTime birthDate, DateTime referenceDate)\n{\n    // 1. Calcul de la différence en années\n    int age = referenceDate.Year - birthDate.Year;\n\n    // 2. Correction si l'anniversaire n'est pas encore passé cette année\n    if (referenceDate.Month < birthDate.Month || \n        (referenceDate.Month == birthDate.Month && referenceDate.Day < birthDate.Day))\n    {\n        age--;\n    }\n\n    return age;\n}\n\n// Utilisation avec la date actuelle\nDateTime birthday = new DateTime(1990, 6, 15);\nint age = CalculateAge(birthday, DateTime.Today);\nConsole.WriteLine($"Âge : {age} ans");
\n\n

Pourquoi cela fonctionne-t-il ?

\n
    \n
  • Différence d'années — le calcul de base.
  • \n
  • Correction — nous vérifions si l'anniversaire a déjà eu lieu cette année. Si ce n'est pas le cas, nous soustrayons 1 an.
  • \n
  • DateTime.Today — nous utilisons la date du jour, et non DateTime.Now, pour éviter les problèmes liés à l'heure de la journée.
  • \n
\n\n

Cette méthode est considérée comme canonique. Elle est simple, transparente et couvre 99 % des cas.

\n\n

Techniques avancées : méthodes d'extension et gestion des cas particuliers

\n\n

Création d'une méthode d'extension pratique

\n\n

Pour ne pas avoir à écrire la même logique dans chaque projet, ajoutez une méthode d'extension pour DateTime :

\n\n
public static class DateTimeExtensions\n{\n    public static int GetAge(this DateTime birthDate, DateTime? referenceDate = null)\n    {\n        var refDate = referenceDate ?? DateTime.Today;\n        \n        if (refDate < birthDate)\n            throw new ArgumentException("La date de naissance ne peut pas être dans le futur.");\n        \n        int age = refDate.Year - birthDate.Year;\n        \n        if (refDate.Month < birthDate.Month || \n            (refDate.Month == birthDate.Month && refDate.Day < birthDate.Day))\n                

Blogs

Book Recommendations