Controle du format d'une date en java

[Résolu/Fermé]
Signaler
-
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
-
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

7 réponses

Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Utilisateur anonyme
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
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852 > Utilisateur anonyme
Arf, c'est qu'il s'agit d'une ancienne version qui ne fonctionne pas alors. Je vais voir si retrouve celle qui marche ^^
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 ?
Salut kij_82

Qu'appelles-tu une "date réelle" ?
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 !
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
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)

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
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
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.