2010-06-30 11 views
32

possible en double:
How do I calculate someone’s age in C#?Calculez la différence entre deux dates et obtenez la valeur en années?

Je veux calculer essentiellement l'âge des employés - Nous avons donc la date de naissance pour chaque employé, donc sur C# Side Je veux faire quelque chose comme Je peux utiliser des jours et manipuler puis obtenir l'âge ... mais je voulais savoir s'il y avait quelque chose Je peux utiliser directement pour obtenir le nombre d'années.

Répondre

60

Voulez-vous calculer l'âge en années pour un employé? Ensuite, vous pouvez utiliser cet extrait (de Calculate age in C#):

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

Sinon, s'il vous plaît préciser. J'ai du mal à comprendre ce que tu veux.

+0

Ya ce que je veux faire .. .désolé de ne pas bien le formuler .. – Vishal

+0

Great! Pas de problème. – alexn

+0

Salut, pourquoi décrémentez-vous l'âge dans la 3ème ligne? – WTFZane

0

Math.Round (DateTime.Now.Subtract (DOB) .TotalDays/365,0)

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

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

et à ce point l'autre solution est moins complexe et continue à être précise sur de plus grandes envergures.

Edit 2, que diriez-vous:

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

Christ, je suce en maths de base, ces jours ...

+1

Ne fonctionne pas - alexn l'a –

+0

Cela ne fonctionnera que pour des portées plus courtes, évidemment, mais si personne ne va avoir plus de 150 ans ... – Kendrick

+0

Yup, ça ne marche pas.Timespan a besoin d'une propriété "TotalYears" :-) – Kendrick

5

Sur this 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; 
    } 
14

deux DateTime vous Soustraire donne un TimeSpan retour. Malheureusement, la plus grande unité qu'il vous rend est Jours.

Sans exacte, vous pouvez estimer, comme ceci:

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

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

Edit: Whoops, TotalDays est un double Days est un entier.

+0

Bonne réponse, je m'interroge sur la division avec 365.25. Pourquoi n'est pas juste 365,0. Je l'ai trouvé aussi dans d'autres sujets et je me demande si vous pouvez m'éclairer. – ppolyzos

+4

.25 est due aux années bissextiles –

+0

Je l'ai également fixé pour utiliser Jours au lieu de TotalDays. TotalDays est un double, pas un int. Puisque nous ne nous soucions pas des jours partiels de toute façon ... – Powerlord

-3
(DateTime.Now - DOB).TotalDays/365 

Soustraire une struct DateTime d'un autre struct DateTime vous donnera une struct TimeSpan qui a les TotalDays de propriété ... puis juste diviser par 365

+1

Pas tous les ans a 365 jours ... – Rob

4
private static Int32 CalculateAge(DateTime DOB) 
    { 
     DateTime temp = DOB; 
     Int32 age = 0; 
     while ((temp = temp.AddYears(1)) < DateTime.Now) 
      age++; 
     return age; 
    } 
+0

diviser par 365 ne gère pas les années bissextiles et en réalité la division par 365,25 ne gère pas réellement les années bissextiles non plus. –

Questions connexes