Rechercher : dans
Par :

Controle du format d'une date en java

Dernière réponse le 10 mar 2008 à 21:13:19 Niels, le 7 mar 2008 à 15:58:32 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Controle du format d'une date en java » dans :
Vérifier le format d'une date en PHP VoirIl existe plusieurs méthodes pour verifier le format d'une date en PHP, vous pouvez par exemple découper la chaîne puis tester les valeurs de chaque élément. Plus simplement nous utiliserons les expressions régulières. Pour valider une date au...
Fichier DAT VoirFormat DAT Un fichier DAT Un fichier .dat est un fichier de données (.DAT signifie data). En général, il s'agit d'un fichier binaire, créé par un programme et utilisable uniquement par ce programme, ce qui signifie qu'il n'est pas censé être ouvert...

1

Niels, le 7 mar 2008 à 16:05:42

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 ?

Répondre à Niels

2

kij_82, le 7 mar 2008 à 16:11:48
  • +1

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)
	}


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

6

danimo, le 8 mar 2008 à 07:38:36

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

Répondre à danimo

7

kij_82, le 10 mar 2008 à 13:07:05

Arf, c'est qu'il s'agit d'une ancienne version qui ne fonctionne pas alors. Je vais voir si retrouve celle qui marche ^^

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

3

Niels, le 7 mar 2008 à 16:16:23

Salut kij_82

Qu'appelles-tu une "date réelle" ?

Répondre à Niels

4

Niels, le 7 mar 2008 à 16:18:56

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 !

Répondre à Niels

5

kij_82, le 7 mar 2008 à 16:19:30

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)

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

8

danimo, le 10 mar 2008 à 18:46:09

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

Répondre à danimo

9

 kij_82, le 10 mar 2008 à 21:13:19

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.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82
Collection CommentÇaMarche.net