Calculatar edad in C#

Una solución fácil de entender y sencilla.

// valor la fecha de hoy.
var today = DateTime.Today;
// valor la edad
var age = today.Year - birthdate.Year;
// Volver al año en que nació la persona en caso de un año bisiesto
if (birthdate > today.AddYears(-age)) age--;

Esta es una forma extraña de hacerlo, pero si formatea la fecha a yyyymmdd y resta la fecha de nacimiento de la fecha actual, entonces suelta los últimos 4 dígitos que tienes la edad 🙂

No sé C #, pero creo que esto funcionará en cualquier idioma.

20080814 – 19800703 = 280111
Drop the last 4 digits = 28.

C# Code:

int now = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
int dob = int.Parse(dateOfBirth.ToString("yyyyMMdd"));
int age = (now - dob) / 10000;
</code>
O alternativamente sin toda la conversión de tipo en forma de un método de extensión. Error de comprobación omitido:
<code>
public static Int32 GetAge(this DateTime dateOfBirth)
{
    var today = DateTime.Today;

    var a = (today.Year * 100 + today.Month) * 100 + today.Day;
    var b = (dateOfBirth.Year * 100 + dateOfBirth.Month) * 100 + dateOfBirth.Day;

    return (a - b) / 10000;
}

No sé cómo se puede aceptar la solución equivocada.
El fragmento C # correcto fue escrito por Michael Stum

Aquí hay un fragmento de prueba:

    DateTime bDay = new DateTime(2000, 2, 29);
    DateTime now = new DateTime(2009, 2, 28);
    MessageBox.Show(string.Format("Test {0} {1} {2}",
                    CalculateAgeWrong1(bDay, now),     // outputs 9
                    CalculateAgeWrong2(bDay, now),     // outputs 9
                    CalculateAgeCorrect(bDay, now)));  // outputs 8

Aquí tienes los métodos:

    public int CalculateAgeWrong1(DateTime birthDate, DateTime now)
    {
        return new DateTime(now.Subtract(birthDate).Ticks).Year - 1;
    }

    public int CalculateAgeWrong2(DateTime birthDate, DateTime now)
    {
        int age = now.Year - birthDate.Year;

        if (now < birthDate.AddYears(age))
            age--;

        return age;
    }

    public int CalculateAgeCorrect(DateTime birthDate, DateTime now)
    {
        int age = now.Year - birthDate.Year;

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

        return age;
    }