2009-03-23 5 views
4

Comment puis-je connaître l'âge d'une personne ayant la date de naissance dans une heure C#.Âge en années avec une précision décimale étant donné une date/heure

Je veux un vieux

+0

Si vous êtes intéressé par la direction « opposée » (conversion des fractions d'années à jours/dates) voir: https://stackoverflow.com/questions/14859332/how-to-convert-fractional-years-say -1-25-années-à-nombre-jours/45389987 # 45389987. –

Répondre

10

Ceci permettra de calculer l'âge exact. La partie fractionnaire de l'âge est calculée par rapport au nombre de jours entre le dernier et le prochain anniversaire, de sorte qu'il gérera correctement les années bissextiles.

La partie fractionnaire est linéaire tout au long de l'année (et ne prend pas en compte les différentes longueurs des mois), ce qui semble avoir plus de sens si vous voulez exprimer un âge fractionnaire.

// birth date 
DateTime birthDate = new DateTime(1968, 07, 14); 

// get current date (don't call DateTime.Today repeatedly, as it changes) 
DateTime today = DateTime.Today; 
// get the last birthday 
int years = today.Year - birthDate.Year; 
DateTime last = birthDate.AddYears(years); 
if (last > today) { 
    last = last.AddYears(-1); 
    years--; 
} 
// get the next birthday 
DateTime next = last.AddYears(1); 
// calculate the number of days between them 
double yearDays = (next - last).Days; 
// calcluate the number of days since last birthday 
double days = (today - last).Days; 
// calculate exaxt age 
double exactAge = (double)years + (days/yearDays); 
+1

Sur la ligne suivante d'anniversaire, AddYears ne gère pas correctement les années bissextiles en ce qui concerne l'âge. Dites que votre anniversaire est le 29 février 2008. Si vous ajoutez 1 an, il vous donne 2008-02-28 au lieu de 2008-03-01. –

+0

Aurait dû être: Si vous ajoutez 1 an, il vous donne 2009-02-28 au lieu du 2009-03-01. –

+1

Eh bien, pourquoi le 2009-03-01 serait-il plus correct que le 2009-02-28? – Guffa

5

âge précis comme 40.69 ans Ce serait un calcul approximatif:

TimeSpan span = DateTime.Today.Subtract(birthDate); 
Console.WriteLine("Age: " + (span.TotalDays/365.25).toString()); 

BTW: voir aussi cette question sur Stack Overflow: How do I calculate someone’s age in C#?

+0

Le .25 est pour les années bissextiles. – DevinB

+0

désolé "/" est vrai. J'ai édité ma réponse. – splattne

+0

Vous pourriez utiliser "span.TotalDays" pour se rapprocher encore mieux – MartinStettner

1

Un approximite serait:

 DateTime bd = new DateTime(1999, 1, 2); 

     TimeSpan age = DateTime.Now.Subtract(bd); 
     Console.WriteLine(age.TotalDays/365.25); 
0

Vous pourriez faire ceci:

Console.WriteLine(DateTime.Now.Date.Subtract(new DateTime(1980, 8, 1)).TotalDays/365.25); 
0

combien d'erreur est autorisée dans la partie fractionnaire? un âge précis serait

31 ans, 10 jours, 3 heures, etc. selon la précision désirée.

1

La partie de 40 ans est assez facile. Mais pour obtenir un point décimal vraiment précis, je ne sais pas comment vous traduisez le reste de l'âge en nombre décimal. Vous voyez l'âge est exprimé en années, mois, jours, heures, secondes. Et le calcul n'est pas si facile. Vous devez faire face à des dates anniversaires. Comme si quelqu'un était né le 31 janvier, quand ont-ils 1 mois? La réponse est le 1er mars. Mais dans certaines années c'est 28 jours plus tard et quelques années 29 jours plus tard. Here est une implémentation javascript que j'ai fait qui essaie de faire face à cela.

Mais je suppose que la décimale pourrait exprimer le nombre de jours depuis le plus récent anniversaire anniversaire divisé par le nombre de jours avant le prochain anniversaire. Et si vous vouliez être plus précis, vous pourriez le faire en quelques secondes en utilisant le même principe.

Mais je pense que c'est une mauvaise représentation d'un âge. Nous ne représentons généralement pas un âge comme ça.

Et assurez-vous que vos dates d'heure sont dans le même fuseau horaire pour vos comparaisons.

Questions connexes