Bonjour,
Je dois calculer la difference en jours entre deux dates, ces dates sont saisies dans les jTextField de mon formulaire
Est ce que quelqu'un peut me dire comment faire?
Version imprimable
Bonjour,
Je dois calculer la difference en jours entre deux dates, ces dates sont saisies dans les jTextField de mon formulaire
Est ce que quelqu'un peut me dire comment faire?
Salut,
Un JTextField étant fait pour saisir une chaîne, il va te falloir convertir la chaîne en date, ce qui implique que la saisie respecte un format précis (ou plusieurs éventuellement, en essayant de convertir avec différents formats). Il y a d'autres types de composants qui te permettront de saisir directement un date (comme un JSpinner avec un SpinnerDateModel, ou des composants externes, comme JCalendar de Toedter).
Pour convertir une chaîne provenant d'une JTextField en date, donc :
Pour faire la différence :Code:
1
2
3 DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy"); // format jour / mois / année LocalDate date1 = LocalDate.parse(jtextfield1.getText(), format); LocalDate date2 = LocalDate.parse(jtextfield2.getText(), format);
Code:
1
2
3
4
5 Period period = Period.between(date1, date2); System.out.println(period.getDays()+" jour(s)"); System.out.println(period.getMonths()+" mois"); System.out.println(period.getYears()+" année(s)");
Si tes dates contiennent des heures, minutes, secondes... il faudra utiliser un LocalDateTime au lieu d'un LocalDate et un format adapté :
Et pour la différence :Code:
1
2
3 DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); LocalDateTime date1 = LocalDateTime.parse(jtextfield1.getText(), format); LocalDateTime date2 = LocalDateTime.parse(jtextfield2.getText(), format);
Si tu as besoin de la différence dans une unité, par exemple, en jours (cela fonctionne aussi bien pour LocalDate que pour LocalDateTime) :Code:
1
2
3 Duration duration = Duration.between(date1, date2); System.out.println(duration.getSeconds()+" seconde(s)");
Code:System.out.println(ChronoUnit.DAYS.between(date1, date2)+" jour(s)");
Bonsoir,
J'ai essaye le code que vous m'avez passé mais il me donne ca:
sachant que cette date est recuperée de la base de donne et j'ai a faire une difference entre cette date et une autre qui est sur mon formulaire.Code:java.time.forma.DateTimeParseException:Text "2017/09/09"could not be parsed at index 4
Forcément, comme je te l'ai indiqué, l'exemple était pour le format jour/mois/année : ..."dd/MM/yyyy"); // format jour / mois / année. Voir la documentation pour adapter le format (ou un peu d'observation...).
Si la date est récupérée depuis une base de données, en théorie, la date est stockée en type date, donc pas besoin de la parser. En revanche, tu vas récupérer un java.sql.Date, pas un LocalDate. Donc il faudra convertir l'un ou l'autre (le plus simple de java.sql.Date vers LocalDate, pour pouvoir faire la différence). Voir tutoriel pour savoir comment on fait (toLocalDate(java.sql.Date)).
voici mon code, je n'arrive pas a voir l'erreur!!!
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 String sql="select Dat_recrut from employe where Id_emp='"+badge.getText()+"'"; p=connect.connecterDB().createStatement(); res=p.executeQuery(sql); while(res.next()){ String datrecrut=res.getString(1); System.out.println(datrecrut); DateTimeFormatter format=DateTimeFormatter.ofPattern("yyyy/MM/dd"); LocalDate d1=LocalDate.parse(datrecrut,format); LocalDate d2=LocalDate.parse(date.getText(),format); Period period=Period.between(d2,d1); int joursolde=period.getDays(); System.out.println(joursolde);
Ta date viens d'une DB, pas besoin de passer par une String pour en refaire une date. Utilise directement getDate(1)
Je ne peux pas mieux la voir que toi. S'il y a une erreur, il faut me donner l'intitullé.
Est-ce que tu es sure que la date est stockée en "String" dans la base (parce que c'est une mauvaise pratique : pas de possibilité de trier, filtrer par comparaison, afficher dans un format localisé, etc.). Et la date est bien une date, alors pour la récupérer c'est :
Code:java.sql.Date datrecrut=res.getDate(1);
Bonsoir,
j'ai utilisé ceci pour la date que j'ai recupere de la base de donne:
et ca marche mais pour la date du systeme j'ai utilisé ceci:Code:
1
2 java.sql.Date datrecrut=res.getDate(1); LocalDate d1=datrecrut.toLocalDate();
et ca me donne une erreur:Code:LocalDate d2=LocalDate.parse(date.getText(),format);
sachant que la date du systeme je l'ai recupere ainsi:Code:java.time.format.DateTimeParseException:Text "2017/09/20" could not be parssed at index 5
Code:
1
2
3
4
5 Calendar cal=new GregorianCalendar(); int month=cal.get(Calendar.MONTH); int year=cal.get(Calendar.YEAR); int day=cal.get(Calendar.DAY_OF_MONTH); date.setText(year+"/"+(month+1)+"/"+day);
j'ai utilisé ceci pour la date que j'ai récupéré de la BDD:
et ca me donne pas d'erreurs mais pour la date du systeme que j'ai récupéré ainsi:Code:
1
2 java.sql.Date datrecrut=res.getDate(1); LocalDate d1=datrecrut.toLocalDate();
ca me donne cette erreure:Code:
1
2
3
4
5 Calendar cal=new GregorianCalendar(); int month=cal.get(Calendar.MONTH); int year=cal.get(Calendar.YEAR); int day=cal.get(Calendar.DAY_OF_MONTH); date.setText(year+"/"+(month+1)+"/"+day);
Ou est le probleme svp?Code:java.time.format.DateTimeParseException:Text"2017/09/20" could not be parssed at index 5