Comprarer 2 date

Signaler
Messages postés
28
Date d'inscription
dimanche 29 avril 2007
Statut
Membre
Dernière intervention
28 mai 2008
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
salut tt le monde

je suis vraiement un débutant en java et je viens vers vous afin de bien vouloir m'aider pour resoudre mon probleme, vous en remerciant.

pour comparer 2 dates ( converti en string ) j'ai fé le code ci dessous.

mon probleme est : comment comaparé a l'aide de l'operateur "<" ou ">", au lieu de equals,
car moi je ve interdire tte date apres le 15/5/2017.

je ne c pas si j'été clair.

Voila mon code :

DateFormat df = new SimpleDateFormat("d/M/yyyy") ;
         //représentation jour/mois/annee
         Date date = df.parse("15/5/2017") ; // pour la date 5 mai 2017
         //Pour récupérer une date en chaîne de caractères sous le format jour/mois/annee
         String sDate = df.format(date) ;
             if (!DateEntretien.equals(sDate)){
          erreurs.add(ActionErrors.GLOBAL_ERROR, new ActionError("aaaa.bbb.erreur.msgDateEntretien")); 

10 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
129
Salut,

T'as pourtant fait le plus dur : récupèrer un objet date à partir du String !

Utilise le Calendar pour comparer tes objets Date au lieu de comparer des String (qui est loin d'être fiable !).
______________________________________
DarK Sidious

Salut,

Utilises plutot GregorianCalendar (import java.util.GregorianCalendar;) et tu pouras savoir si une date proposee est >, < ou = a la date 15/5/2017.

Une autre solution serait de convertir la date a comparer en int sous la forme
aaaamjj et la comparer a 20170515.(int dtateb)

Par exemple :


10/1/2012 donnerait 2012110 (int datea)
if (datea > dateb) // refusee

Mais crois moi ce sera mieux avec GregorianCalendar.

N'hesites pas a me faire signe si tu ne trouves pas.

Cordialement,



...\ Dan /...
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
129
Salut,

Danimo : le Calendar, la classe mère du GregorianCalendar, suffit amplement pour comparer les dates.

Par contre, pour ta comparaison entre int, c'est inexact :

13/01/2001 > 13/11/2000, et pourtant 2001113 < 20001113 !

Il faut utiliser le format : yyyyMMdd !

Mais pour comparer des dates, rien ne vaut le Calendar qui apporte une solution élégante à la comparaison, à la place d'une bidouille avec un String !

______________________________________
DarK Sidious

Salut DarK,

La honte !....

J'ose quand meme corriger:
yyyyMMjj et comparer a 20170515.(int dtateb)

10/01/2012 donnerait 20120110 (int datea)

...\ Dan /...
Messages postés
28
Date d'inscription
dimanche 29 avril 2007
Statut
Membre
Dernière intervention
28 mai 2008

salut,
 
J'ai essayé de faire ce que vous m'avez proposer, mais qd meme je suis un pe perdu.
voila mon nouveau code.

Calendar calendrier = Calendar.getInstance();
      d = New Date(yyyy,m,d);
      int datea = Integer.parseInt("DateEntretien");
      int dateb = ("2017,5,15");
      if (datea > dateb){
       erreurs.add(ActionErrors.GLOBAL_ERROR, new ActionError("aaaa.bbb.erreur.msgDateEntretien"));
      }
Messages postés
28
Date d'inscription
dimanche 29 avril 2007
Statut
Membre
Dernière intervention
28 mai 2008

salut, 
j'ai rectifié mon code : mais ya des trucs qui manquent 

Calendar calendrier = Calendar.getInstance();
      Date d = new Date(yyyy/MM/dd);
      int datea = Integer.parseInt("DateEntretien");
      int dateb = ("2017,5,15");
     
      if (datea > dateb){
       erreurs.add(ActionErrors.GLOBAL_ERROR, new ActionError("aaaa.bbb.erreur.msgDateEntretien"));
      }
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
129
Salut,

Aïe aïe aïe, tu mélange un peu tout :

Calendar calendrier1 = Calendar.getInstance();
Calendar calendrier2 = Calendar.getInstance();

DateFormat df = new SimpleDateFormat("dd/MM/yyyy") ;
Date date = df.parse("15/05/2017") ;
calendrier1.setTime(date.getTime());
calendrier2.setTime(dateEntretient.getTime());

et ensuite, tu n'as plus qu'à utiliser :
calendrier1.after(calendrier2)
calendrier1.before(calendrier2)
calendrier1.equals(calendrier2)
______________________________________
DarK Sidious

Salut,

? // date A
?? int aaA = 2009;
?? int mmA = 1;
?? int jjA = 1;


?? // date B
?? int aaB = 2008;
?? int mmB = 12;
?? int jjB = 25;


?? // Zéro à gauche de la valeur possible < 10 du jour et du mois
?? String Snum_moisA = (mmA<10?"0":"") + mmA;
?? String Snum_moisB = (mmB<10?"0":"") + mmB;
?? String SjourA = (jjA<10?"0":"") + jjA;
?? String SjourB = (jjB<10?"0":"") + jjB;


?? // parametrage de GregorianCalendar pour la date A
?? int anneeA = aaA;
?? int num_moisA = mmA;
?? int jourA = jjA;
?? Calendar dA = new GregorianCalendar(anneeA, num_moisA - 1, jourA);
 POURQUOI num_moisA - 1 ?
 PARCE QUE GregorianCalendar RETOURNE UNE VALEUR 0 À 11
 ET NON 1 À 12 POUR LE NUMÉRO DE MOIS. (cf Préambule -Thème 0-)


?? // parametrage de GregorianCalendar pour la date B
?? int anneeB = aaB;
?? int num_moisB = mmB;
?? int jourB = jjB;
?? Calendar dB = new GregorianCalendar(anneeB, num_moisB - 1, jourB);
 POURQUOI num_moisB - 1 ?
 PARCE QUE GregorianCalendar RETOURNE UNE VALEUR 0 À 11
 ET NON 1 À 12 POUR LE NUMÉRO DE MOIS. (cf Préambule -Thème 0-)


?? boolean b = dA.equals(dB); // true si les dates A et B sont égales
?? boolean b1 = dA.after(dB); // true si la date A > à la date B
?? boolean b2 = dA.before(dB); // true si la date A < à la date B


?? if (b) aff1 = "la date A " + anneeA + "/" + Snum_moisA + "/" + SjourA
 + "  est égale à la date B " + anneeB + "/" + Snum_moisB + "/" + SjourB;


?? if (b1) aff1 = "la date A " + anneeA + "/" + Snum_moisA + "/" + SjourA
 + "  est postérieure à la date B " + anneeB + "/" + Snum_moisB + "/" + SjourB;


?? if (b2) aff1 = "la date A " + anneeA + "/" + Snum_moisA + "/" + SjourA
 + "  est antérieure à la date B " + anneeB + "/" + Snum_moisB + "/" + SjourB;

Cordialement,



...\ Dan /...
Messages postés
28
Date d'inscription
dimanche 29 avril 2007
Statut
Membre
Dernière intervention
28 mai 2008

salut,

j'ai essayé ta solution DARKSIDIOUS, sauf que j'ai toujours le "setTime" souligné en rouge.

calendrier1.setTime(date.getTime());

erreur:
-  la méthde setTime(Date) du type calendar ne s'applique pas aux arguments (long)

ainsi que le "getTime".

calendrier2.setTime(dateEntretient.getTime());

erreur:
- La méthode getTime() n'est pas défini pour le type String.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
129
Salut,

Il te faut juste modifié les types :
calendrier1.setTime(date);

calendrier2.setTime(df.parse(dateEntretient));

______________________________________
DarK Sidious