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![]()
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![]()
Pour la date actuelle en millisecondes :
pour la date de naissance :
Code : Sélectionner tout - Visualiser dans une fenêtre à part long maintenantMillis = System.currentTimeMillis();
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 java.util.Calendar naissance = Calendar.getInstance();
Une soustraction fera l'affaire pour la suite et je te laisse le soin de la conversion en années.
Code : Sélectionner tout - Visualiser dans une fenêtre à part long naissanceMillis = naissance.getTime();
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.
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; }
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 :
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();
Code : Sélectionner tout - Visualiser dans une fenêtre à part set(int year, int month, int date)
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
La je pense que ton exercice est fini non ? Lit un peu la doc, il y a rien qui te l'interdit !!!
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)); } }
Et puis quelle est l'utilité de me citer ? de faire une discussion qui fait des km ?
Le promme principale est
L'écouteur 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); } }
Et la classe calcul 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); } }
C'est surtout le programme principale qui est mon diable
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"); } }
Merci![]()
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
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); } }
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.
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; }
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.
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....
Partager