Comprarer 2 date

simeone1 Messages postés 28 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 28 mai 2008 - 19 mai 2008 à 16:19
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 21 mai 2008 à 18:51
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

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
19 mai 2008 à 18:48
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
0
Utilisateur anonyme
19 mai 2008 à 19:03
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 /...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
19 mai 2008 à 21:15
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
0
Utilisateur anonyme
20 mai 2008 à 01:54
Salut DarK,

La honte !....

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

10/01/2012 donnerait 20120110 (int datea)

...\ Dan /...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
simeone1 Messages postés 28 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 28 mai 2008
20 mai 2008 à 13:20
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"));
      }
0
simeone1 Messages postés 28 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 28 mai 2008
20 mai 2008 à 14:57
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"));
      }
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 mai 2008 à 18:50
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
0
Utilisateur anonyme
21 mai 2008 à 00:57
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 /...
0
simeone1 Messages postés 28 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 28 mai 2008
21 mai 2008 à 15:38
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.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 mai 2008 à 18:51
Salut,

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

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

______________________________________
DarK Sidious
0
Rejoignez-nous