Controle du format d'une date en java

Résolu
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. Contributeur
    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. 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
    2. Contributeur
      @danimoArf, 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. 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
    1. Salut kij_82

      Qu'appelles-tu une "date réelle" ?
      0
      1. 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
        1. Contributeur
          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
          1. 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
            1. Contributeur
              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