IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Calcul d'Age en java


Sujet :

Collection et Stream Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut Calcul d'Age en java
    Comment peut-on récupérer la date system en java et calculer l'âge d'une personne connaissant sa date de naissance?
    Si possible, donnez moi la syntaxe en intégralité.

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Pour la date actuelle en millisecondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long maintenantMillis = System.currentTimeMillis();
    pour la date de naissance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.util.Calendar naissance = Calendar.getInstance();
    Ensuite, il faut jouer avec les setters, et l'on récupère la date en millisecondes comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long naissanceMillis = naissance.getTime();
    Une soustraction fera l'affaire pour la suite et je te laisse le soin de la conversion en années.

    L'API joda-time, plus simple, permet d'arriver facilement à ce genre de résultat, et tient en compte les années bissextiles, ainsi que les sauts de secondes, ce qui n'est pas fait dans le calcul ci-dessus.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    Tu peut extraire les années
    get(Calendar.YEAR);

    Tu obtiendra ainsi l'année de naissance et l'année courante, exemple :

    13 fev 1985 -> 1985
    22 oct 2009 -> 2009

    dans ce cas la la personne à 24 ans, utilise alors la méthode add(Calendar.YEAR,-24), et compare les date, enlève une année si 24 ans plus tôt la personne n'est pas encore né : elle est né après le 22 octobre. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static int getYears(Date d)
    {
      Calendar curr = Calendar.getInstance();
      Calendar birth = Calendar.getInstance();
      birth.setTime(d);
      int yeardiff = curr.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
      curr.add(Calendar.YEAR,-yeardiff);
      if(birth.after(curr))
      {
        yeardiff = yeardiff - 1;
      }
      return yeardiff;
    }

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut
    Citation Envoyé par Fmunch Voir le message
    Tu peut extraire les années
    get(Calendar.YEAR);

    Tu obtiendra ainsi l'année de naissance et l'année courante, exemple :

    13 fev 1985 -> 1985
    22 oct 2009 -> 2009

    dans ce cas la la personne à 24 ans, utilise alors la méthode add(Calendar.YEAR,-24), et compare les date, enlève une année si 24 ans plus tôt la personne n'est pas encore né : elle est né après le 22 octobre. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static int getYears(Date d)
    {
      Calendar curr = Calendar.getInstance();
      Calendar birth = Calendar.getInstance();
      birth.setTime(d);
      int yeardiff = curr.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
      curr.add(Calendar.YEAR,-yeardiff);
      if(birth.after(curr))
      {
        yeardiff = yeardiff - 1;
      }
      return yeardiff;
    }
    ça c'est une fonction n'est ce pas?
    Est ce que ce serai trop demandé si je demande le progamme complet pour le calcul de l'age?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    Franchement je trouve que tu abuse... il faudrait quand même un peu lire la documentation, pour définir une date il faut utiliser la classe Calendar. Il y a des méthodes set qui permettent de tous justement définir ce que l'on souhaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(int year, int month, int date)
    donc tu crée un objet Calendar à l'aide de la méthode static Calendar getInstance(), puis tu en change ça date à sa convenance. Après tu cherche dans la javadoc, quelle fonction retourne une Date : tu as besoin d'une date. Tu devrais même pas avoir besoin de lire la javadoc pour trouver cela : c'est dans mon programme, mais enfin... Surprise c'est getTime();

    Donc après longue recherche dans la page cité précédemment on trouve la fonction getTime(), donc tu obtient l'objet Date.

    La méthode que j'ai écrit étant static elle peut directement être appelé à partir de la fonction principal main. Ce qui nous donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    import java.util.Calendar;
    import java.util.Date;
    class Test2
    {
      public static int getYears(Date d)
      {
        Calendar curr = Calendar.getInstance();
        Calendar birth = Calendar.getInstance();
        birth.setTime(d);
        int yeardiff = curr.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
        curr.add(Calendar.YEAR,-yeardiff);
        if(birth.after(curr))
        {
          yeardiff = yeardiff - 1;
        }
        return yeardiff;
      }
     
      public static void main(String[] args)
      {
        if(args.length != 3) { System.err.println("Erreur");System.exit(1); }
        Calendar birthdaycal = Calendar.getInstance();
        birthdaycal.set(Integer.parseInt(args[0]),Integer.parseInt(args[1])-1,Integer.parseInt(args[2]));
        Date birthday = birthdaycal.getTime();
        System.out.println("L'age du capitaine est : "+getYears(birthday));
      }
    }
    La je pense que ton exercice est fini non ? Lit un peu la doc, il y a rien qui te l'interdit !!!

    Et puis quelle est l'utilité de me citer ? de faire une discussion qui fait des km ?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut Regardez bien ce code et aidé moi à le corriger.
    Le promme principale est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import java.util.*;
    import javax.swing.JOptionPane;
    import java.awt.*;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    public class AGE{
        public static void main(String args[]){
            Date now=new Date();
            CALCUL c=new CALCUL();
            c.setBounds(500,500,250,250);
            c.setBackground(Color.orange);
            c.setLocation(125,100);
            c.setLayout(new FlowLayout());
            Panel p=new Panel();
            p.setLayout(new GridLayout(4,4));
            Label l=new Label("Nom");
            l.setBackground(Color.lightGray);
            final TextField t=new TextField("",3);
            t.setBackground(Color.white);
            Label b=new Label("Prenom");
            b.setBackground(Color.lightGray);
            final TextField d=new TextField("",3);
            d.setBackground(Color.white);
            Label e=new Label("Date de naissance");
            e.setBackground(Color.lightGray);
            final TextField f= new TextField("",3);
            f.setBackground(Color.white);
            c.setLayout(new FlowLayout());
            Panel p1=new Panel();
           p1.setLayout(new GridLayout(9,9));
    //programmation du bouton Valider
           Button g=new Button("Valider");
          g.addActionListener(new ActionListener(){
              public void actionPerformed(ActionEvent k){ 
                  String t1=t.getText();
                  String t2=d.getText();
                  String Date=f.getText();
     
                  //if(t1.charAt(0)=="") t.transferFocus();
                     // if(t2.charAt(0)=="") d.transferFocus();
                      //if(Date.charAt(0)=="") f.transferFocus();
                        long x= Long.parseLong(Date);
                        long maintenantMillis = System.currentTimeMillis();
                        //java.util.Calendar naissance= Calendar.getInstance(x);
                        //long naissanceMillis = naissance.getTime();
                        //final String u = SimpleDateFormat.getDateInstance().format(now);
                            if(x>0)
                             x=maintenantMillis-x;
                             long Age=x/(365*24*60*60*1000);
                    JOptionPane.showMessageDialog(null,"Salut vous avez "+Age+" ans"); 
                          }
          });
            g.setBackground(Color.green);
             Panel p2=new Panel();
           p2.setLayout(new GridLayout(9,9));
            Button i= new Button("Quiter");
            i.addActionListener(new Ecouteur());
            i.setBackground(Color.pink);
            p.add(l);
            p.add(t);
            p.add(b);
            p.add(d);
            p.add(e);
            p.add(f);
            p1.add(g);
            p2.add(i);
            c.add(p);
            c.add(p1);
            c.add(p2);
            c.setVisible(true);
        }
    }
    L'écouteur est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    public class Ecouteur implements ActionListener{
        public void actionPerformed(ActionEvent k){
            System.exit(0);
        }
    }
    Et la classe calcul est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import java.awt.*;
    public class CALCUL extends Frame{
        public CALCUL(){
    super("CALCUL DE L'AGE");
        }
    }
    C'est surtout le programme principale qui est mon diable
    Merci

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    Tu me donne l'impression de ne pas comprendre du tout ce que tu fait. Ta classe CALCUL ( il faudrait quelle se nomme Calcul, ou mieux CalculAge, ou Age, enfin autre chose ... ) Elle n'a aucune raison d'étendre Frame !!!

    Commence déjà à faire des programme en ligne de commande, et comprend le langage plutôt que de faire des interface graphique et rien comprendre.

    ne nomme pas Date mais date, ou mieux date_str, car Date pour moi c'est une classe, il y a des conventions !!!

    System.currentTimeMillis(), il y a un constructeur Date pour ça, mais je t'ai donné une méthode, tu as qu'a l'utiliser la

    long Age=x/(365*24*60*60*1000); et les années bissextile, c'est l'intérêt de la classe Calendar la !!!

    Encore une indication, tu peut découper le champ date_str avec split en mots, que tu utilise ensuite dans le code que je t'ai donnée.

    Il faut pas oublier le pack quand tu fiat une interface graphique.

    Regarde comment d'autres applications sont faites !!!

    tu as un tas d'exemples ici :

    http://www.java2s.com/Code/JavaAPI/CatalogJavaAPI.htm

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    J'ai fait une petite page pour t'expliquer l'ensemble :
    http://fmunch.org/info/java/AgeDuCapitaine/index_fr.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    import java.util.Calendar;
    import java.util.Date;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JTextField;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
    public class AgeCapitaine2 extends JPanel
    {
      JTextField jtf;
      JLabel jl;
      public AgeCapitaine2()
      {
        JButton jb = new JButton("Calculer");
        jtf = new JTextField(10);
        jl = new JLabel();
        jb.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent evt)
          {
            String str = jtf.getText();
            String[] res = str.split("/");
            if(res.length != 3)
            {
              jl.setText("Date non valide");
              return;
            }
            Calendar cal = Calendar.getInstance();
            try
            {
              cal.set(Integer.parseInt(res[2]),Integer.parseInt(res[1]),Integer.parseInt(res[0]));  }catch(NumberFormatException nfe)
            {
              jl.setText("Date non valide");
              return;
            }
            int age = getYears(cal.getTime());
            jl.setText("L'age du capitaine est : "+age+"an"+(age >1?"s":""));
          }
        });
        add(jb); add(jtf); add(jl);
     
      }
      public static int getYears(Date d)
      {
        Calendar curr = Calendar.getInstance();
        Calendar birth = Calendar.getInstance();
        birth.setTime(d);
        int yeardiff = curr.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
        curr.add(Calendar.YEAR,-yeardiff);
        if(birth.after(curr))
        {
          yeardiff = yeardiff - 1;
        }
        return yeardiff;
      }
     
      public static void main(String[] args)
      {
        JFrame jf = new JFrame("Calcul de l'age du capitaine");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setPreferredSize(new java.awt.Dimension(500,400));
        jf.getContentPane().add(new AgeCapitaine2());
        jf.pack();
        jf.setVisible(true);
      }
    }

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    Tu vient sur le forum, et tu attend une réponse sans faire le moindre effort, c'est l'impression que tu me donne. Tu es inscrit depuis très peu de temps.

  10. #10
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2016
    Messages : 1
    Par défaut Salut, c'est Dramingo Dra.
    Voici une fonction qui pourra t'aider a calcul l'age d'une personne. Mais j'ai cree ma fonction en utilisant le java 8 (expression lamda!!!).



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ]public Period  Calcul_age(LocalDate dates)
      {
            Period age;
            String chaine=""; chaine+=dates;
     
          //LocalDate.now() permette de recuperer la Date du system
            LocalDate dat=LocalDate.now();
     
            String chaines=""; chaines+=dat;
           //ainsi j'ai declarer des string pour recuperer les sous-chaines de la date qu'on va saisir et ainsi que la date du system
           //n'oublie pas de mettre la date sous le format "yyyy/dd/MM"
     
            String annees=chaines.substring(0,4);
            String moiss=chaines.substring(5,7);
            String jj=chaines.substring(8,10);
     
            String annee=chaine.substring(0,4);
            String mois=chaine.substring(5,7);
            String jj=chaine.substring(8,10);
     
            /*********Expression lamda********/
            age= Period.between(
                     //en java 8 LocalDate.of prend en parameter l'annee, le mois et le jour
     
                    LocalDate.of(Integer.parseInt(annees),Integer.parseInt(moiss),Integer.parseInt(jjs)),
                    LocalDate.of(Integer.parseInt(annee),Integer.parseInt(jj),Integer.parseInt(mois))
                    );
            return age;
        }

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je doute que Sanni ait encore besoin de calculer l'age depuis 7 ans (enfin j'espère qu'il a pu résoudre son problème depuis).
    Quoiqu'il en soit, il y a bien plus simple en Java 8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LocalDate dateOfBirth = LocalDate.of(1969, Month.SEPTEMBER, 11);
    LocalDate now = LocalDate.now();
    int age = dateOfBirth.until(now).getYears(); // si on veut l'age en années par exemple
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Et je rajouterais, pour bien enfoncer, ton code est du n'importe nawak, et je ne vois pas où tu y a vu une lambda....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requette de calcul d'age
    Par jbenz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/08/2007, 15h52
  2. calcul l'age apartir d'une date donnée
    Par DJERDJAR YACINE dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 05/07/2007, 02h28
  3. requete select: calcul d'age
    Par amelhajer dans le forum Langage SQL
    Réponses: 1
    Dernier message: 29/03/2007, 10h14
  4. [BO XIr2] Calcul d'age dans le Designer
    Par BOginer dans le forum Designer
    Réponses: 1
    Dernier message: 20/02/2007, 15h59
  5. Calculer l'age d'une personne
    Par Oberown dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 27/09/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo