IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Comparaison de dates


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2014
    Messages : 80
    Par défaut Comparaison de dates
    Bonjour à tous,*

    Je commence à être à bout de souffle, du coup je me permets de poser un cierge !

    J’essaye de réaliser un planning de locations JEE/Tomcat/Oracle. Je suis étudiant et je découvre la gestion des dates en Java, aïe ça fait mal !

    Donc, je récupère dans un arrayList les informations importantes pour la gestion du planning. Les dates sont au format « String »
    Au niveau de la JSP j’affiche les infos sous forme de tableau avec les éléments qui vont bien.
    Un Datepicker est présent pour gérer la date à afficher. Jusque-là ça fonctionne relativement bien.

    Nom : 3.PNG
Affichages : 420
Taille : 24,0 Ko


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Date dateRecherche = null;
    					Locations loc = null;
    					SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    					String maintenant = (String)session.getAttribute("maDate");
    					Date dateDuJour = formatter.parse(maintenant);
     
    					for (int iLigne = 0; iLigne < listeLocations.size(); iLigne++) {
    						//if (dateDuJour >= loc.getConvertDateDeb() && dateDuJour <= loc.getConvertDateFin()){
    							//if (dateDuJour.compareTo(loc.getConvertDateFin()) == 0) 
    							//for (dateDuJou.after(loc.getConvertDateDeb()); )
    							//{
     
    							//Date dateDebutResa = loc.getConvertDateDeb();
    							//do
    							//{
    							System.out.println("dateDuJour : "+dateDuJour);
    							System.out.println("date maintenant : "+maintenant);
    			%>
    					<tr>	
    			<%	
    				loc = (Locations)listeLocations.get(iLigne);
    				int inter = (loc.getCalculHFin() - loc.getCalculHDeb());	
    				int numColEnCours = 0;
    				out.println("<td>" + loc.getNomSalle() +"</td>");
     
    				int NbrCol = 34 - inter;	
    				for (int col = 0; col <= NbrCol; col++) {
    								if (col == loc.getCalculHDeb()) {
    									numColEnCours = inter;	
    									System.out.println("dateconvertDeb jsp : "+loc.getConvertDateDeb());
    									System.out.println("dateconvertefin jsp : "+loc.getConvertDateFin());
     
    									out.println("<td title=\""+loc.getNomClient()+"\" bgcolor=\"#CCCCFF\"  colspan=\""+ inter+ "\"><a class=\"lienTd\" href=\"planningLocations.jsp?id=" + loc.getIdAffaireRessource() + "\">"+ loc.getNumAffaire() + " - " + loc.getNomAffaire()+ "</a></td>");
    									iLigne = iLigne + numColEnCours;
    								} else {
    									out.println("<td>&nbsp;</td>");
    								}// fin du else
    							}//fin du for "col"
     
    						//}while (dateDuJour.after(dateDebutResa));//fin du if date
    					}//fin du for "iLigne
    				}//fin du eles si location is.Empty		
    			%>
    				</tr>
    				</table>
    			</div>
    Maintenant j’essaye de gérer les dates, et là, c’est la prise de tête depuis quelques jours.
    Au niveau de mon planning je cherche à afficher les locations qui correspondent à la date consultée ainsi que les locations en cours.
    En gros :
    Si la date de début de location commence aujourd’hui (date renvoyer par le datePicker) = afficher
    Si la date de fin de la location fini aujourd’hui (date renvoyer par le datePicker) = afficher
    Si aujourd’hui est supérieur à la date de début et inférieur à la date de fin = afficher

    Oui ça représente que trois lignes mais c’est une prise de tête monumentale….
    Du coup, vue que les dates en Bdd sont typées string, j’ai créé des méthodes pour les convertir en SimpleDateFormat. Apparemment ça fonction, j’ai fait des System.out.println :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    public Date getConvertDateDeb(){
     
    		try {
    			dateDebConvert = (Date)formatter.parse(dateDebut);
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		System.out.println("date deb convert : " + dateDebConvert);
    		return dateDebConvert;
    	}
     
    	public void setConvertDateDeb(Date dateDebConvert){
    		this.dateDebConvert = dateDebConvert;
    	}
     
    	public Date getConvertDateFin(){
    		try {
    			dateFinConvert = (Date)formatter.parse(dateFin);
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		System.out.println("date fin convert : "+dateFinConvert);
    		return dateFinConvert;
    	}
     
    	public void setConvertDateFin(Date dateFinConvert){
    		this.dateFinConvert = dateFinConvert;
    	}



    Dixit la console Eclipse :

    date deb convert : Wed Jan 28 00:00:00 CET 2015
    dateconvertDeb jsp : Wed Jan 28 00:00:00 CET 2015
    date fin convert : Wed Jan 28 00:00:00 CET 2015
    dateconvertefin jsp : Wed Jan 28 00:00:00 CET 2015
    dateDuJour : Thu Apr 16 00:00:00 CEST 2015
    date deb convert : Fri Feb 20 00:00:00 CET 2015
    dateconvertDeb jsp : Fri Feb 20 00:00:00 CET 2015
    date fin convert : Fri Feb 20 00:00:00 CET 2015
    dateconvertefin jsp : Fri Feb 20 00:00:00 CET 2015
    dateDuJour : Thu Apr 16 00:00:00 CEST 2015
    date deb convert : Mon Jan 26 00:00:00 CET 2015
    dateconvertDeb jsp : Mon Jan 26 00:00:00 CET 2015
    date fin convert : Mon Jan 26 00:00:00 CET 2015
    Au niveau de la Jsp j’ai tout essayé !!!
    Des boucles (while, do While) , des conditions (if) et même des comparaison (before, after, comparTo)…. Et ben chez moi, aucune méthode de filtre ne fonctionne.
    Pourtant pour lui ça ne pose aucun souci :
    http://www.mkyong.com/java/how-to-co...dates-in-java/

    Bref je sais plus quoi faire, j'ai l'impression de tourner sur une erreur que je ne vois pas.
    Si vous avez une idée, une question, une piste, c'est avec grand plaisir...

    Merci beaucoup par avance

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ben la première chose que tu va faire, c'est ne pas stocker les dates dans ta base de données sous forme de string. C'est un abhération, avec ça t'es obligé de pomper toute la base pour garder 3 ou 4 malheureuse lignes. C'est quand même plus performant à la fois pour la DB et pour ton programme de pouvoir tapper une requête de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from reservation where ? between debut and fin

    tu ne pense pas?

    Ensuite, au delà de cela, pour comparer des dates avec java, tu as les méthodes before et after.

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2014
    Messages : 80
    Par défaut
    Merci énormément tchize_ pour ta réponse.

    Je comprends très bien qu'une date au format string est une aberration, malheureusement je n'ai pas trop la main sur la BDD.
    Mais je vais essayer de faire la modif.

    Dans mon cas après la récupération de la date et la conversion en SimpleDateFormat, j'ai essayé à plusieurs reprise before et after sans succès.

    Je vais déja essayer de faire faire la modif en Bdd.

    Merci pour le conseil

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Vinc06 Voir le message
    Dans mon cas après la récupération de la date et la conversion en SimpleDateFormat,
    On ne convertit pas en "SimpleDateFormat", on parse une String en java.util.Date, SimpleDateFormat est juste une classe utilitaire.
    Citation Envoyé par Vinc06 Voir le message
    j'ai essayé à plusieurs reprise before et after sans succès.
    Il faudrait montrer le code que tu as utilisé, parce que là on a juste des bouts en commentaires dans le code sans savoir lesquels ont été activés en même temps.

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2014
    Messages : 80
    Par défaut
    Bonjour et merci beaucoup tchize_ pour le temps que tu consacres à ma situation.

    Sur tes précédentes recommandations, j'ai fais le choix de modifier la dynamique.
    Je vais donc récupérer à l'aide d'une requête Sql, uniquement les éléments qui correspondes à la date de consultation.

    J'ai réussi à obtenir deux nouvelles colonnes avec les dates au format Date ou du moins dateTime puisque les heures, les minutes et les secondes sont mentionnées.

    la gestion des intervalles, heures de début et heures de fin sera effectuée par une méthode, directement en classe métier.

    Mais maintenant je dois avouer que j'ai beaucoup de mal à constituer des requêtes fonctionnelles, pour le moment je cherche juste à tester la requete pour obtenir un résultat conforme au besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MASUPERTABLE WHERE GROUPE_RESSOURCE LIKE 'CAT%' AND ('2015-04-09','yyyy-MM-dd') BETWEEN DAT_DEBUT2 AND DAT_FIN2
    ORA-01796: impossible d'utiliser cet opérateur avec des listes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MASUPERTABLE  WHERE GROUPE_RESSOURCE LIKE 'CAT%' AND '20150409' BETWEEN DAT_DEBUT2 AND DAT_FIN2
    ORA-01861: le littéral ne concorde pas avec le format chaîne de caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MASUPERTABLE  WHERE GROUPE_RESSOURCE LIKE 'CAT%' AND '2015-04-09' BETWEEN DAT_DEBUT2 AND DAT_FIN2
    ORA-01861: le littéral ne concorde pas avec le format chaîne de caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MASUPERTABLE  WHERE GROUPE_RESSOURCE LIKE 'CAT%' AND ('2015-04-09 00:00:00', 'yyyy-MM-dd  HH24: mm: ss') BETWEEN DAT_DEBUT2 AND DAT_FIN2
    ORA-01796: impossible d'utiliser cet opérateur avec des listes
    Nom : 5.PNG
Affichages : 361
Taille : 13,2 Ko

    Encore merci pour le coup de main

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Vinc06 Voir le message
    Mais maintenant je dois avouer que j'ai beaucoup de mal à constituer des requêtes fonctionnelles, pour le moment je cherche juste à tester la requete pour obtenir un résultat conforme au besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MASUPERTABLE WHERE GROUPE_RESSOURCE LIKE 'CAT%' AND ('2015-04-09','yyyy-MM-dd') BETWEEN DAT_DEBUT2 AND DAT_FIN2
    Tu as bien mis les parenthèse pour l'appel mais tu as oublié l'appel de fonction (et la casse n'est pas correcte pour ce format oracle)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MASUPERTABLE WHERE GROUPE_RESSOURCE LIKE 'CAT%' AND TO_DATE('2015-04-09','YYYY-MM-DD') BETWEEN DAT_DEBUT2 AND DAT_FIN2
    A noter que ce n'est pas vraiment important car en java tu écriras

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM MASUPERTABLE WHERE GROUPE_RESSOURCE LIKE 'CAT%' AND ? BETWEEN DAT_DEBUT2 AND DAT_FIN2
    Et tu passera le paramètre sous forme dans java.sql.Date.

Discussions similaires

  1. comparaison de dates javascript
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/07/2005, 08h45
  2. comparaison de dates
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/06/2005, 16h12
  3. comparaison de date
    Par nickoshiba dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2005, 15h48
  4. Comparaison de dates
    Par Tapioca dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2004, 15h55
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 21h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo