Come posso calcolare l'età di qualcuno in C#?

Dato un DateTime che rappresenta il compleanno di una persona, come posso calcolare la sua età in anni?

Soluzione

Una soluzione semplice e facile da capire.

// Save today's date.
var today = DateTime.Today;
// Calculate the age.
var age = today.Year - birthdate.Year;
// Go back to the year the person was born in case of a leap year
if (birthdate.Date > today.AddYears(-age)) age--;

Tuttavia, questo presuppone che tu stia cercando l'idea occidentale di età e non usando il calcolo dell'Asia orientale.

Commentari (34)

Un'altra funzione, non da me ma trovata sul web e raffinata un po':

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;
}

Solo due cose che mi vengono in mente: Che dire delle persone provenienti da paesi che non usano il calendario gregoriano? DateTime.Now è nella cultura specifica del server, credo. Ho assolutamente 0 conoscenze su come lavorare con i calendari asiatici e non so se c'è un modo semplice per convertire le date tra i calendari, ma nel caso in cui vi stiate chiedendo di quei ragazzi cinesi dell'anno 4660 :-)

Commentari (1)

Il modo migliore che conosco a causa degli anni bisestili e tutto il resto è:

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

Spero che questo aiuti.

Commentari (0)