Controle du format d'une date en java

Résolu
Niels -  
kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je réalise une application web en Java avec une base de données Mysql. Dans cette application, j'ai des pages JSP qui contiennent des formulaires. L'un des champs à remplir est une date.

Je voudrais pouvoir vérifier si l'utilisateur rentre une date du bon format (à savoir yyyy-mm-dd). Je ne sais comment faire, quelqu'un pourrait m'aider svp ?

Merci !
Niels
Configuration: Windows XP
Firefox 2.0.0.12

7 réponses

  1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Bonjour,

    Tu peux suivre cet exemple que j'utilise et qui fonctionne :
    Pour controler le format de ta date :
            String myDate = "2007-05-26";
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	sdf.setLenient(true);
      	Date d = new Date();
    	  	
      	try {
    	   d = sdf.parse(myDate );
    	   String t = sdf.format(d);
    	   if(t.compareTo(myDate) !=  0)
    		  	throw new Exception("MESSAGE ERREUR);
    			  	
      	} catch (Exception e) {
    		   // --- Gestion mauvaise date
      	}
    


    Et pour contrôler s'il s'agit d'une date réelle, je crois que ce code fonctionne (pas certain à vérifier) :
    	Calendar c = Calendar.getInstance();
            String myDate = "2007-95-26";
    	try{
    		c.setLenient(false);
    		c.set( Integer.valueOf(getFrom().substring(0,4)).intValue(),
    				Integer.valueOf(getFrom().substring(5,7)).intValue(),
    				Integer.valueOf(getFrom().substring(8,10)).intValue());
    	
    		c.getTime();
    	}
    	catch(Exception iAE){
    		// --- Gestion de date inexistante (ou d'erreur)
    	}
    

    2
    1. danimo
       
      Salut kij,

      Avec

      ----
      String unedate = "2007-95-26"; // celle de ton exemple
      mano = unedate.substring(0,4);
      p1 = Integer.parseInt(mano);
      mano = unedate.substring(5,7);
      p2 = Integer.parseInt(mano);
      mano = unedate.substring(8,10);
      p3 = Integer.parseInt(mano);
      try
      {
      GregorianCalendar gc = new GregorianCalendar(p1, p2, p3);
      gc.setLenient(false); // sans cette ligne, pas d'exception possible
      // (true par defaut)
      }
      catch (Exception e) {
      e.printStackTrace();
      ----

      c'est bon a tous les coups.

      Cordialement Dan
      0
      1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857 > danimo
         
        Arf, c'est qu'il s'agit d'une ancienne version qui ne fonctionne pas alors. Je vais voir si retrouve celle qui marche ^^
        0
  2. Niels
     
    J'ai oublié de préciser, la date je la récupère sous forme de String grâce à la formule suivante :

    public String traiter(HttpServletRequest req, HttpServletResponse rep){
    ...
    String date = req.getParameter("date");
    ...
    }

    Donc serait-il possible de vérifier si le string récupérer par req.getParameter("date") répond au format yyyy-mm-dd ?
    0
  3. Niels
     
    Salut kij_82

    Qu'appelles-tu une "date réelle" ?
    0
  4. Niels
     
    Ok, j'ai compris ce que tu voulais dire par "date réelle". Désolé, la journée à été difficile !

    Merci encore pour tes solutions que tu me proposes !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Une date qui existe / a existée (après 1901 par contre, c'est le seul hic) / existera (pas comme celle que j'ai mis dans la variable myDate)
    0
  7. danimo
     
    Salut,

    Je me rend compte que j'ai oublie de preciser que l'exception n'est declenchee qu'a l'extraction d'une des donnees
    fournie par GregorianCalendar.

    Exemples : System.out.println( gc.getTime() ); ou int annee = gc.get(Calendar.YEAR); etc...

    ------

    try
    {
    GregorianCalendar gc = new GregorianCalendar(p1, p2, p3);
    gc.setLenient(false); // sans cette ligne, pas d'exception possible
    // (true par defaut)
    System.out.println( gc.getTime() ); // "2007-95-26" avec cette date : exception
    }
    catch (Exception e) {
    e.printStackTrace();
    ----

    Dan
    0
  8. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Donc c'est bien la bonne version que j'ai mis.
    C'est bien pour ça que j'ai mis :
    c.getTime();
    


    De manière à ce qu'une exception soit levée si la date n'est pas bonne. C'est vrai que je n'ai pas précisé qu'il faut gérer les cas d'erreurs en catchant l'exception.
    0