Comment calculer l'âge de quelqu'un en C

Étant donné un DateTime représentant l'anniversaire d'une personne, comment puis-je calculer son âge en années ?

请先 登录 后评论

6 réponses

Nick Berardi

Le meilleur moyen que je connaisse à cause des années bissextiles et tout est :

DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);

J'espère que cela vous aidera.

请先 登录 后评论
Michael Stum

Une autre fonction, pas de moi mais trouvée sur le web et un peu affinée :

public static int GetAge(DateTime birthDate)
{
    DateTime n = DateTime.Now; // To avoid a race condition around midnight
    int age = n.Year - birthDate.Year;

    if (n.Month < birthDate.Month || (n.Month == birthDate.Month && n.Day < birthDate.Day))
        age--;

    return age;
}

Juste deux choses qui me viennent à l'esprit : qu'en est-il des personnes originaires de pays qui n'utilisent pas le calendrier grégorien ? DateTime.Now est dans la culture spécifique au serveur, je pense. J'ai absolument 0 connaissances sur le travail avec les calendriers asiatiques et je ne sais pas s'il existe un moyen simple de convertir des dates entre les calendriers, mais juste au cas où vous vous poseriez des questions sur ces chinois de l'année 4660 :-)

请先 登录 后评论
David Wengier

C'est la version que nous utilisons ici. Ça marche, et c'est assez simple. C'est la même idée que celle de Jeff mais je pense que c'est un peu plus clair parce que ça sépare la logique pour soustraire un, donc c'est un peu plus facile à comprendre.

public static int GetAge(this DateTime dateOfBirth, DateTime dateAsAt)
{
    return dateAsAt.Year - dateOfBirth.Year - (dateOfBirth.DayOfYear < dateAsAt.DayOfYear ? 0 : 1);
}

Vous pouvez développer l'opérateur ternaire pour le rendre encore plus clair, si vous pensez que ce genre de chose n'est pas clair.

Évidemment, cela se fait comme une méthode d'extension sur DateTime, mais il est clair que vous pouvez saisir cette ligne de code qui fait le travail et la mettre n'importe où. Ici, nous avons une autre surcharge de la méthode Extension qui passe en DateTime.Now, juste pour être complet.

请先 登录 后评论
ScArcher2

C'est une façon étrange de le faire, mais si vous formatez la date en yyyymmdd et soustrayez la date de naissance de la date actuelle, puis supprimez les 4 derniers chiffres, vous avez l'âge : )

Je ne sais pas C

请先 登录 后评论
user2601

J'ai créé une fonction définie par l'utilisateur SQL Server pour calculer l'âge d'une personne, compte tenu de sa date de naissance. Ceci est utile lorsque vous en avez besoin dans le cadre d'une requête :

using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    [SqlFunction(DataAccess = DataAccessKind.Read)]
    public static SqlInt32 CalculateAge(string strBirthDate)
    {
        DateTime dtBirthDate = new DateTime();
        dtBirthDate = Convert.ToDateTime(strBirthDate);
        DateTime dtToday = DateTime.Now;

        // get the difference in years
        int years = dtToday.Year - dtBirthDate.Year;

        // subtract another year if we're before the
        // birth day in the current year
        if (dtToday.Month < dtBirthDate.Month || (dtToday.Month == dtBirthDate.Month && dtToday.Day < dtBirthDate.Day))
            years=years-1;

        int intCustomerAge = years;
        return intCustomerAge;
    }
};
请先 登录 后评论
James Curran

Ma suggestion

int age = (int) ((DateTime.Now - bday).TotalDays/365.242199);

Il semble que l'année change à la bonne date. (J'ai fait un test ponctuel jusqu'à 107 ans)

请先 登录 后评论
  • 14 abonnés
  • 0 favoris,593 Feuilleter
  • Jeff Atwood posée à 2022-09-13 04:33