problème de dates

Nikko
problème de dates

Bonjour,

Je suis en train de développer une application web qui gère les réservations de matériel.

Dans le formulaire de réservation, l'utilisateur entre une date de retour provisoire du produit. Pour pas qu'il ne fasse d'erreur, j'ai créé une fonction qui empêche l'utilisateur d'entrer une date antérieure à celle du jour. Mais lorsque ce dernier entre la date du jour, le programme la reconnaît comme date antérieure.

J'utilise java.util.date et voici ma fonction :

public boolean validitedate(HttpServletRequest req, HttpServletResponse rep) throws Exception{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		sdf.setLenient(true);
	  	Date d = new Date();
		Date x = new Date();
		x = stringToDate(req.getParameter("date"), "yyyy-MM-dd");
		if(d.before(x)==true || d==x)
			return true;
		else
			return false;
	}

En utilisant java.util.date, le format qui est utilisé est, par exemple, Tue Mar 18 11:46:13 CET 2008. Je pense que pour contourner le problème, il faudrait supprimer "11:46:13 CET". Quelqu'un sait-il comment il faut procéder ?

D'avance, merci
Nikko

willbback

Bonjour,
Tu peux créer ou modifier la date que tu veux avec la bibliothèque Calendar. Ce qui te permettra de supprimer les heures, minutes, secondes.
Une autre solution est de comparer les chaîne de caractères. Si tu formatte des 2 date avec le pattern YYYYMMDD, tu peux comparer les chaînes. Si elles sont égales, tu es dans le cas ou l'utilisateur à saisie la date du jour, sinon, tu peux faire ton before...

Nikko

Bonjour Willbback,

tout d'abord, je souhaite te remercier pour ta réponse. J'ai suivie tes conseils en formattant mes deux dates en String. Cependant, je rencontre une problème. J'ai essayé ce code dans une classe main quelconque :

Class.forName(pilote);
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/projet", "root", "mysql");
		
		Statement stt = conn.createStatement();
		ResultSet rss = stt.executeQuery("SELECT numero, nom, prenom, libelle, quantiteres, date_format(datedepart, '%d-%m-%Y'), date_format(dateretour, '%d-%m-%Y') FROM type t, reservation r, salarie s WHERE s.codesal=r.codesal AND r.codetype=t.codetype;");
		rss.last();
		int nb = rss.getRow();
		rss.beforeFirst();
		int j = 1;
		Date d = new Date();
		Date x = new Date();
		while(j<=nb){
			rss.absolute(j);
			x = stringToDate(rss.getString(7), "yyyy-MM-dd");
			System.out.println(x);
			j++;
		}

Et le format de la variable x qui m'est retourné est le suivant : Mon Aug 28 00:00:00 CET 24. Le formatage n'est donc pas effectué et je n'en comprends pas la raison... Aurais-tu une idée ?

Amicalement,
Nikko

edit : On remarquera que la date qui est retournée n'est pas celle qui est attendue... La date récupérée de la requête est le 19 mars 2008... La cause serait p-ê la fonction date_format() de la requête SQL car quand je l'enlève, la bonne date est retournée...

willbback

Bonjour,
C'est normal, le date_format contenu dans ton "select" te retourne une date au format "dd-MM-yyyy" et non pas "yyyy-MM-dd" comme tu t'y attend avec ta fonction stringToDate.
Cordialement,

Nikko

Oui, je formate ma date dans ma requête, mais je ne peux pas reformater une date déjà formatée ? J'ai essayé de retirer le date-format() de ma requête SQL et de formater avec java, mais ca me retourner la date du jour mais toujours dans le format Wed Mar 19 00:00:00 CET 2008 et non dans le format 2008-03-19... Pourquoi ? Je ne comprends vraiment pas...

willbback

La chaine retournée par ta requête est au format dd-MM-yyyy. Ta fonction stringToDate transforme une string en date. Le format que tu passe à la fonction lui indique comment lire la chaine pour la transformer en date. Il faut donc écrire :

x = stringToDate(rss.getString(7), "dd-MM-yyyy");

Tout simplement
Nikko

Merci beaucoup pour ta réponse, en effet ca marche !