[Java] Valider le format d'une date ? Bug avec SimpleDateFormat ?

Valider le format d'une date ? Bug avec SimpleDateFormat ? [Java] - Java - Programmation

Marsh Posté le 03-04-2003 à 17:00:04    

Je voudrais valider le format d'une date en java, mais ca ne fonctionne pas vraiment, voilà comment je fais :
 
format = new SimpleDateFormat("dd/MM/yyyy" );
format.setLenient(false);
format.parse(date);
 
le probleme c'est que 21/01/200a me retourne vrai  :(

Reply

Marsh Posté le 03-04-2003 à 17:00:04   

Reply

Marsh Posté le 03-04-2003 à 17:19:59    

Esteb@n a écrit :

Je voudrais valider le format d'une date en java, mais ca ne fonctionne pas vraiment, voilà comment je fais :
 
format = new SimpleDateFormat("dd/MM/yyyy" );
format.setLenient(false);
format.parse(date);
 
le probleme c'est que 21/01/200a me retourne vrai  :(


heu format.parse(...) ca renvoie pas un objet Date plutot qu'un boolean :heink:

Reply

Marsh Posté le 03-04-2003 à 17:22:08    

oui mais ca declenche une erreur si le format n'est pas correcte (et mon code est dans un try catch).
 
Ca marche avec "toto" mais pas avec "01/01/20aa"

Reply

Marsh Posté le 03-04-2003 à 17:28:17    

Esteb@n a écrit :

oui mais ca declenche une erreur si le format n'est pas correcte (et mon code est dans un try catch).
 
Ca marche avec "toto" mais pas avec "01/01/20aa"  


arf ok bizarre.
 
et ca te met quoi dans ton objet Date resultant ?


Message édité par bobuse le 03-04-2003 à 17:28:32
Reply

Marsh Posté le 03-04-2003 à 17:29:49    

Code :
  1. package test;
  2. import java.text.*;
  3. import java.util.*;
  4. public class TestDateFormat {
  5. public static void main (String[] args) throws Exception {
  6.  ParsePosition parsePos = new ParsePosition(0);
  7.  DateFormat format = new SimpleDateFormat("dd/MM/yyyy" );
  8.  String textDate = "21/01/200a";
  9.  Date date = format.parse(textDate, parsePos);
  10.  if (textDate.length() >  parsePos.getIndex()) {
  11.   System.out.println("Erreur !" );
  12.  } else {
  13.   System.out.println("date = " + date);
  14.  }
  15. }
  16. }


 
voilà. Si tu veux faire ca bien, tu te redéfinies ta propre SimpleDateFormat qui étend java.text.SimpleDateFormat et qui balance une ParseException quand le ParsePosition est pas en fin de chaine.

Reply

Marsh Posté le 03-04-2003 à 17:34:46    

ha ok en fait quand il parsait 20aa, il interprete année = (19)20, et le reste "on s'en fout", non ?

Reply

Marsh Posté le 03-04-2003 à 17:39:03    

bobuse a écrit :

ha ok en fait quand il parsait 20aa, il interprete année = (19)20, et le reste "on s'en fout", non ?


nan, c'était l'année 20, et le reste il le parse pas. Et puisque la date est valide, il ne généère pas de ParseException.
 
Il faut utiliser le ParsePosition pour voir il s'est arrêté ... Ca permet d'enchainer des parsing dans une même chaine.

Reply

Marsh Posté le 03-04-2003 à 17:59:40    

Niquel merci bcp :) Sinon j'allais partir dans des substring et tout ;)

Reply

Sujets relatifs:

Leave a Replay

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