web-dev-qa-db-fra.com

Calculer la différence entre deux dates et obtenir la valeur en années?

Duplicata possible:
Comment calculer l'âge d'une personne en C #?

Je veux calculer essentiellement l'âge des employés - Nous avons donc un DOB pour chaque employé, donc du côté C #, je veux faire quelque chose comme ça -

int age=Convert.Int32(DateTime.Now-DOB);

Je peux utiliser des jours et manipuler puis obtenir l'âge ... mais je voulais savoir s'il y avait quelque chose que je pouvais utiliser directement pour obtenir le nombre d'années.

44
Vishal

Voulez-vous calculer l'âge en années d'un employé? Ensuite, vous pouvez utiliser cet extrait (à partir de Calculer l'âge en C # ):

DateTime now = DateTime.Today;
int age = now.Year - bday.Year;
if (bday > now.AddYears(-age)) age--;

Sinon, veuillez préciser. J'ai du mal à comprendre ce que tu veux.

79
alexn

La soustraction de deux DateTime vous donne un retour TimeSpan . Malheureusement, la plus grande unité qu'il vous donne est Days.

Bien que ce ne soit pas exact, vous pouvez l'estimer, comme ceci:

int days = (DateTime.Today - DOB).Days;

//assume 365.25 days per year
decimal years = days / 365.25m;

Edit: Oups, TotalDays est un double, Days est un int.

16
Powerlord

Sur ce site, ils ont:

   public static int CalculateAge(DateTime BirthDate)
   {
        int YearsPassed = DateTime.Now.Year - BirthDate.Year;
        // Are we before the birth date this year? If so subtract one year from the mix
        if (DateTime.Now.Month < BirthDate.Month || (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day))
        {
            YearsPassed--;
        }
        return YearsPassed;
  }
7
Kyra
    private static Int32 CalculateAge(DateTime DOB)
    {
        DateTime temp = DOB;
        Int32 age = 0;
        while ((temp = temp.AddYears(1)) < DateTime.Now)
            age++;
        return age;
    }
4
matt-dot-net

Math.Round (DateTime.Now.Subtract (DOB) .TotalDays/365.0)

Comme indiqué, cela ne fonctionnera pas. Vous devez faire ceci:

(Int32)Math.Round((span.TotalDays - (span.TotalDays % 365.0)) / 365.0);

et à ce stade, l'autre solution est moins complexe et continue d'être précise sur de plus grandes étendues.

Edit 2, que diriez-vous:

Math.Floor(DateTime.Now.Subtract(DOB).TotalDays/365.0)

Le Christ que je suce aux mathématiques de base ces jours-ci ...

0
Kendrick