Syndication : Atom 1.0  RSS 2.0
Blogs des développeurs   »   Le blog de Julien H

Article complet: Algorithme de calcul de l'age

10/07/2008

Permalink 10:54:04, Catégories: Java, Récapitulatif Java, 229 mots   French (FR) , Morgoth

[Java] Algorithme de calcul de l'age

Aujourd'hui, petit problème d'algorithmique simple. Comment calculer en Java l'age d'une personne à ce jour en connaissant sa date de naissance.

Une recherche sur Google ne donne pas de réponse simple. J'espère que celle-ci le sera.

[Suite:]

 
/** 
 * Compute age of someone. Assume birthday is before today. 
 * @param birthday Date of birth. 
 * @param today The date at which you want to calculate age.  
 * @return age 
 */ 
public int computeAge(Date birthday, Date today) { 
    Calendar cBirthday = new GregorianCalendar(); 
    Calendar cToday = new GregorianCalendar(); 
    cBirthday.setTime(birthday); 
    cToday.setTime(today); 
 
    int yearDiff = cToday.get(Calendar.YEAR) - cBirthday.get(Calendar.YEAR); 
    cBirthday.set(Calendar.YEAR, cToday.get(Calendar.YEAR)); 
    if (cBirthday.before(cToday)) { 
        return yearDiff; //Birthday already celebrated this year 
    } 
    else { 
        return Math.max(0, yearDiff-1); //Need a max to avoid -1 for baby 
    } 

Si vous avez plus simple, plus lisible ou si j'ai fait une erreur, merci de compléter.

Social Bookmarking:

                                     

Commentaires, Pingbacks:

Connectez-vous pour vous abonner à cet article:

Flux de commentaires pour cet article : Atom 1.0  RSS 2.0
Commentaire de: Hikage [Membre] · http://hikage.developpez.com
Si tu veux t'amuser avec JodaTime, le framework à la base de la nouvelle API de temps Java 7, cela donne ceci :

public int computeAge(DateTime birthDay, DateTime currentDate) {
if(birthDay.isBefore(currentDate)){
Period period = new Period(birthDay, currentDate);
return period.getYears();
} else {
return 0;
}
}

public int computeAge(Date birthDay, Date currentDate ){
return computeAge(new DateTime(birthDay), new DateTime(currentDate));
}
Permalien 10/07/2008 @ 11:56
Commentaire de: bassim [Membre]
Salut,
Une remarque par rapport au premier algorithme,
si quelqu'un est né le 15 juillet 1985, il devrait en ce jour (10 juillet 2008) avoir 22 ans normalement.
Si on soustrait que les années, ça donnera 23 ans , non ?
Permalien 10/07/2008 @ 12:07
Commentaire de: lunatix [Membre]
tu as la license de ce code sous le coude ? je l'ajouterais bien a mon petit DSL qui me permet de gérer les dates
http://code.google.com/p/datedsl/source/browse/trunk/dateDsl/src/com/unimondes/dsl/DateDsl.java

avec j'arrive faire des trucs genre
range()
.startWith(now()).endWith(tomorrow())
.isDistinctFrom(
range().startWith(yesterday()).endWith(now()
)
)

pour gerer les calculs de dates.

Permalien 10/07/2008 @ 13:09
Commentaire de: Morgoth [Membre]
@Hikage : Je connaissais pas JodaTime. Ca semble être vraiment une bonne chose, car les manipulations de dates sont très fréquentes dans certaines applications.

@bassim : Regarde bien l'algo, je soustrais les années, mais ensuite il y a un petit test pour vérifier si l'anniversaire est déjà passé.

@lunatix : La licence ? On va dire que c'est une donation au domaine public ;)
Permalien 10/07/2008 @ 14:11
Commentaire de: bassim [Membre]
Autant pour moi,

" cBirthday.set(Calendar.YEAR, cToday.get(Calendar.YEAR)); "

J'avais pas fait attention à cette instruction !
Permalien 10/07/2008 @ 15:59

Vous devez être identifié pour poster un commentaire.

Liste des blogs

Le blog de Julien H

Catégories


Rechercher

<  Novembre 2009  >
Lun Mar Mer Jeu Ven Sam Dim
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

Syndiquez ce blog XML

Articles :

Commentaires :

Vos questions techniques : forum d'entraide Blogs - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.