[RESOLU][java] transformer un champ String en date

transformer un champ String en date [RESOLU][java] - Java - Programmation

Marsh Posté le 02-08-2006 à 09:23:36    

Bonjour tout le monde !
 
Je pense que c'est une question redondante, et je m'en excuse par avance :
 
J'ai un champ String qui est censé être au format "JJ-MM-AAAA". Je souhaite vérifier que ce champ est une date. Est-ce que je vérifie caractère par caractère ou y a-t-il une façon plus élégante de le faire ?
 
Merci d'avoir lu mon post.
 
Jerhom
 
/edit : j'ai trouvé la réponse à ma question dans les posts ci-dessous. Encore merci. :)


Message édité par jerhom le 02-08-2006 à 16:34:42
Reply

Marsh Posté le 02-08-2006 à 09:23:36   

Reply

Marsh Posté le 02-08-2006 à 09:29:24    

Bien vu, y a une fonction recherche, "java string date" en parametre de donnera ce que tu veux savoir.
 
Bienvenue sur le forum :jap:


Message édité par _darkalt3_ le 02-08-2006 à 09:29:50
Reply

Marsh Posté le 02-08-2006 à 09:38:47    

Code :
  1. public void isDateValid(String jDate) throws ParseException{
  2.         DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy" );
  3. dateFormat.parse(jDate);
  4. }


Si ça renvoie pas d'exception -> alors c'est que jDate est une date valide.

Message cité 1 fois
Message édité par brasseld le 02-08-2006 à 10:22:02
Reply

Marsh Posté le 02-08-2006 à 10:20:42    

brasseld a écrit :

Code :
  1. public void isDateValid(String jDate) throw ParseException{
  2.         DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy" );
  3. dateFormat.parse(jDate);
  4. }


Si ça renvoie pas d'exception -> alors c'est que jDate est une date valide.


 
 
C'est vraiment sympa d'avoir répondu et c'est exactement ce que je cherchais.  
mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici, mici,  :jap:  
 
Jerhom

Reply

Marsh Posté le 02-08-2006 à 11:38:43    

Fausse joie  :??:  
 
Si je passe 01-32-20011 comme String, ça ne provoque pas d'erreur. Or il ne s'agit pas d'une date. Est-ce que qq1 peut me préciser si j'ai merdouillé qq part ?
 

Reply

Marsh Posté le 02-08-2006 à 11:52:09    

c'est normal, va donc faire un tour sur la javadoc ....

Reply

Marsh Posté le 02-08-2006 à 12:06:46    

souk a écrit :

c'est normal, va donc faire un tour sur la javadoc ....


Est-ce que tu peux être plus précis, STP ? J'ai encore un peu de mal avec l'anglais. Si je mets yyyy ça ne vérifie pas que mon année est sur 4 digits ? ou si je mets MM ça ne vérifie pas qu'il n'y a pas plus de 12 mois par an ?

Reply

Marsh Posté le 02-08-2006 à 13:20:16    

Tiens c'est fait à l'arrache mais ça fonctionne... mais il faut chercher de temps en temps...

Code :
  1. public static boolean estDateValide(String date) {
  2.     try {
  3.      DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy" );
  4.      dateFormat.parse(jDate);
  5.     }
  6. catch(ParseException pe) {
  7. return false;
  8. }
  9. //Ici c'est pas terrible pour récupérer les jour, mois et année.. cherche autre chose
  10.  int jj = 0, mm = 0, aaaa = 0;
  11.  try {
  12.   jj = Integer.parseInt(date.substring(0, 2));
  13.   mm = Integer.parseInt(date.substring(3, 5));
  14.   aaaa = Integer.parseInt(date.substring(6, 10));
  15.  } catch(IndexOutOfBoundsException soobe) {
  16.   return false;
  17.  } catch(NumberFormatException nfe) {
  18.   return false;
  19.  }
  20.  if(jj < 0 || jj > 31)
  21.   return false;
  22.  else if(mm < 0 || mm > 12)
  23.   return false;
  24.  else if(aaaa < 1900 || aaaa > 2200)
  25.   return false;
  26.  else {
  27.   switch(mm) {
  28.   case 1 : case 3 : case 5 : case 7 : case 8 : case 10: case 12:
  29.    if(jj > 31)
  30.     return false;
  31.    break;
  32.   case 4 : case 6 : case 9 : case 11 :
  33.    if(jj > 30)
  34.     return false;
  35.    break;
  36.   case 2 :
  37.    if(estUneAnneeBissextile(aaaa) && jj > 29) {
  38.     return false;
  39.    }
  40.    else if(! estUneAnneeBissextile(aaaa) && jj >28) {
  41.     return false;
  42.    }
  43.    break;
  44.   default : logger.error("Erreur inattendue lors de la verification de la validite d'une date." );
  45.   }
  46.  }
  47.  return true;
  48. }
  49. public static  boolean estUneAnneeBissextile(int year) {
  50.  return (year%4 ==0) && ( (year%100 !=0) || (year%400 ==0) );
  51. }


Reply

Marsh Posté le 02-08-2006 à 13:53:55    

Je te remercie de ce que tu fais. Par contre je suis prêt à chercher mais j'aurais voulu qu'on me mette un peu plus sur la voie, du genre : "ce que tu demandes, il faut que tu le développes toi même" ou "regardes mieux la fonction machin de la classe truc qui correspond à ce que tu demande".
A la base, je pensais qu'il y avait un moyen simple avec une string du type "jj-mm-aaaa" de dire si oui ou non c'est une date valide. J'avais moi même commencé à parser mon string pour récupérer chaque champ, mais je ne trouvais pas ça sexy. Si c'est la seul façon, merci de me le confirmer ;)

Reply

Marsh Posté le 02-08-2006 à 14:35:44    

Code :
  1. dateFormat.setLenient(false);


 
c'est dans la javadoc hein [:pingouino]

Reply

Marsh Posté le 02-08-2006 à 14:35:44   

Reply

Marsh Posté le 02-08-2006 à 15:05:39    

souk a écrit :

Code :
  1. dateFormat.setLenient(false);


 
c'est dans la javadoc hein [:pingouino]


 
C'est pas toujours évident de s'y retrouver dans la javadoc, surtout quand le terme "lenient" n'est pas parlant.
 
Je te remercie de cette précieuse aide.  :jap:

Reply

Marsh Posté le 02-08-2006 à 15:24:28    

brasseld a écrit :

Tiens c'est fait à l'arrache mais ça fonctionne...


tu sors.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-08-2006 à 15:29:10    

non, setLenient(boolean) pour vérifier si une date est valide ou pas... A l'école on te demande à ce que tes noms de méthode soit parlant ok, mais sur la javadoc c'est un minimum...

Reply

Marsh Posté le 02-08-2006 à 15:33:19    

brasseld a écrit :

non, setLenient(boolean) pour vérifier si une date est valide ou pas... A l'école on te demande à ce que tes noms de méthode soit parlant ok, mais sur la javadoc c'est un minimum...


hmmm ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-08-2006 à 15:43:24    

Pas grave...
Je disais juste que en cours on t'oblige à donner à tes méthodes un nom qui a du sens, qu'il indique ce que fait ta méthode. Or dans le cas du setLenient(boolean), il faut dire que le nom n'est pas trés explicite sur le contenu de cette méthode. Aprés, c'est sur que ce que je lui ai dis c'est pas beau quand il existe une méthode adéquate... Mais je ne sortirai pas pour autant ;-)

Reply

Marsh Posté le 02-08-2006 à 15:46:39    

http://img180.imageshack.us/img180/3171/picture2rg9.png
 
Je vois pas ce qu'il y a de pas explicite, c'est juste que tu connaissais pas le terme "lenient" [:spamafote] (même s'il devrait etre a false par defaut, je trouve)
 
Et si, tu sors, pour l'immonde caca que tu as pondu ci-dessus [:dawao]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-08-2006 à 15:50:39    

Mouais....bref.

Reply

Marsh Posté le 02-08-2006 à 15:55:03    

non mais si tu veux, tu peux toujours rapporter un bug à sun en leur suggérant un meilleur nom [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-08-2006 à 15:57:21    

Non ça va, mais le fait que lenient doit être à false par défaut est plus intéressant...je te laisse t'en occuper [:itm]

Reply

Marsh Posté le 02-08-2006 à 16:20:42    

mais en fait c'est normal comme comportement, toutes les classes heritant de java.text.Format sont permissives par defaut, et c'est normal, leur role est de formater, pas de valider [:souk]
 
ex:

Code :
  1. Number number = NumberFormat.getIntegerInstance().parse("123CoucouJeSuis un Integer yeah ;)" );
  2. System.out.println("number = " + number);


 
et ca donne:

number = 123


 
 [:dawao]


Message édité par souk le 02-08-2006 à 16:21:15
Reply

Marsh Posté le 02-08-2006 à 16:24:18    

délire le coup du [ code=java ] !!
 
bon, j'attéris peut-être un peu...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed