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

Interfaces Graphiques en Java Discussion :

Problème avec jDateChooser pour comparait 2 dates


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut Problème avec jDateChooser pour comparait 2 dates
    Bonjour à tous,

    Pour commencer, c'est très simple ... "Je suis maudit", je veux m'avancer dans mon projet et paf ! J'ajoute 2 simple jDateChooser (1 pour la date "Du" et l'autre pour la date "Au") et bien vous croirez pas ? Ça ne marche pas !!!!!!!

    J'utilise la méthode toute simple qui est mise à dispo c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jDateChooserDu.getDate().compareTo(jDateChooserAu.getDate());
    et elle ne fonctionne pas ... enfin du moins avec moi.

    Je voudrais juste vérifier que si l'utilisateur choisit une date "au" inférieur à a date "du" afficher un message, c'est tout bête mais si je met du et au à la même date pour lui c'est faux. J'ai mis les valeurs des 2 dans un jTextfield pour voir les valeurs et chose marrante, il y en a 1 qui m'affiche 23/01/2015 00:00:00 et l'autre qui m'affiche 23/01/2015 15:08:33. Pourtant je n'ai changé aucune propriété, les 2 sont identiques mais le résultat est différent.

    Alors question :
    Faut-il que j'aille voir un marabout ou est-ce que c'est normal ? Si oui (pour le normal), savez-vous comment faire pour comparaît les 2 dates ?

    En vous remerciant d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Points : 235
    Points
    235
    Par défaut
    convertis les dates en millisecondes pour les comparer ensuite
    La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par junior222 Voir le message
    convertis les dates en millisecondes pour les comparer ensuite
    Non ! Date.compareTo() est fait pour ça, et en plus ça ne changera rien du tout de comparer les ms.

    Le problème est que la classe Date de java modélise un instant : des jour, mois, années, mais aussi des heures, minutes, secondes (et des ms d'ailleurs). Et là justement tu compares visiblement une date qui contient heure, minute, seconde à zéro, et une autre qui contient une heure, minute et seconde différente de zéro, donc les dates sont différentes.

    C'est là que ça se complique : les Date en Java n'ont jamais été super pratique. Il y a un moyen de s'en sortir en utilisant Calendar, pour faire des manipulations de dates, comme celle qui pourrait consister à forcer les heures, minutes et secondes à 0, pour ne comparer que jour, mois et années.

    L'autre solution serait d'utiliser la bibliothèque JodaTime qui a été faite justement parce que les java.util.Date ça ennuyait tout le monde.

    Enfin, Java8 introduit une API, java.time, qui simplifier certaines de ces manipulations (en introduisant en particulier un vrai type date, LocalDate).

    Dis-moi si tu es en Java8...sinon on verra quelle solution tu voudras employer (JodaTime me semble une bonne idée, sans vouloir t'imposer quoique ce soit).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Merci à tous les 2 pour vos réponses, en revanche Joël ... tu n'es pas gentil (je plaisante bien sur) à chaque fois que je post un message tu m'annonces une mauvaise nouvelle ... je m'aperçois que Java est basé sur les mauvaises nouvelles.

    Alors j'ai vérifié la version que j'avais de Java mais je sais pas si c'est là où il fallait aller (Panneau de configuration -> Java -> A propos) et j'ai la version 8 Mise à jour 25. Cependant, si c'est bien là, l'utilisateur final aura certainement des soucis s'il n'a pas la même version que moi ?

    Merci d'avance

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    Alors j'ai vérifié la version que j'avais de Java mais je sais pas si c'est là où il fallait aller (Panneau de configuration -> Java -> A propos) et j'ai la version 8 Mise à jour 25. Cependant, si c'est bien là, l'utilisateur final aura certainement des soucis s'il n'a pas la même version que moi ?
    Certes, c'est un vrai souci, que tu lui communiques en sources à compiler, ou en jar. Là, il faut relire le sujet si c'est indiqué, et sinon demander au prof. C'est important que tu le fasses au plutôt, car il y a 2 ou 3 petites choses qui risquent de ne pas passer en 1.7 (je pense en particulier au "effectively final" qui peuvent facilement être inaperçus par des débutants ou moins débutants peut-être aussi d'ailleurs). Et ça peut prendre du temps de tout corriger pour que ça compile en 1.7.

    Sinon pour la version, c'est surtout dans ton IDE que tu dois vérifier. On peut tout à fait avoir une version par défaut et travailler dans une autre dans un IDE. Sous Eclipse, il suffit de regarder le nœud JRE System Library dans le projet (tu as la mention JavaSE-1.8 ou JavaSE-1.7]. Dans NetBeans, dans le dossier Librairies (tu y trouveras un item JDK 1.8, ou JDK 1.7).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Alors je viens de relire le sujet, il faut lui rendre tout le projet ... c'est à dire toutes les classes et autres, ensuite je viens de vérifier ma version IDE et j'ai la 1.8 des 2 côtés (Eclipse et Netbeans). Le prof indique aussi que l'on a entière liberté pour réaliser ce projet donc après s'il y a un soucis ... tant pis.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    Alors je viens de relire le sujet, il faut lui rendre tout le projet ... c'est à dire toutes les classes et autres, ensuite je viens de vérifier ma version IDE et j'ai la 1.8 des 2 côtés (Eclipse et Netbeans). Le prof indique aussi que l'on a entière liberté pour réaliser ce projet donc après s'il y a un soucis ... tant pis.
    le JDateChooser étant un vieux composant, il travaille tout en java.util.Date. Si tu créés une instance de java.util.Date, il y aura l'heure exacte dedans. Je pense que JFileChooser s'arrange de lui-même pour virer l'heure/minute/seconde, mais je n'en suis pas sûr.

    Quoiqu'il en soit : il faut donc faire des conversions.

    1. en java, avant la 1.8, on avait à disposition java.util.Date et java.util.Calendar

      Voilà une méthode utilitaire qui utilise Calendar pour virer l'heure/minute/secondes d'une date :

      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
      public class DateUtils {
       
      public static Date toDate(Date date) {
       
      		if ( date==null ) {
      			return null;
      		}
       
      		Calendar calendar = GregorianCalendar.getInstance();
       
      		calendar.setTime(date);
       
      		calendar.set(Calendar.HOUR, 0);
      		calendar.set(Calendar.MINUTE, 0);
      		calendar.set(Calendar.SECOND,0);
      		calendar.set(Calendar.AM_PM, Calendar.AM);
      		calendar.set(Calendar.MILLISECOND,0); 
       
      		return calendar.getTime();
       
      	}
       
       
      }
    2. avec Joda - Time

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      LocalDate localDate = new LocalDate(date.getTime());
      où date est un java.util.Date. Ensuite, tu peux appeler compareTo sur localDate.

      avec
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      import org.joda.time.LocalDate
    3. Avec Java8 (accroche-toi à ton clavier pour ne pas tomber à la renverse)

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
      où date est un java.util.Date. Ensuite, tu peux appeler compareTo sur localDate.

      avec
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      import java.time.LocalDate;
      import java.time.ZoneId;


    Je te laisse le choix...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Merci Joël pour tes nombreuses réponses, mon choix est tout fait ... la simplicité donc Java8 cependant il y a truc que je n'ai pas bien compris. Il faut que je garde jDateChooser ou que je m'en sépare ? Si je dois le supprimer, comment est ce que je dois implanter LocalDate dans le GUI ?

    Toutes tes explications sont claires mais là dû zapper une étape.

    Merci pour tout

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    Merci Joël pour tes nombreuses réponses, mon choix est tout fait ... la simplicité donc Java8 cependant il y a truc que je n'ai pas bien compris. Il faut que je garde jDateChooser ou que je m'en sépare ? Si je dois le supprimer, comment est ce que je dois implanter LocalDate dans le GUI ?

    Toutes tes explications sont claires mais là dû zapper une étape.

    Merci pour tout
    Malheureusement il n'y a pas de datepicker tout fait en standard dans SWING (il y'en a un en JavaFX, je ne sais pas ce qu'il vaut, mais on doit pouvoir l'intégrer, mais c'est un peu compliqué juste pour ça). Je ne sais pas s'il y a des bibliothèques externes compatibles avec l'API java.time.

    Donc si tu veux saisir une date dans un beau calendrier popup, tu es obligé de conserver JDateChooser (ou d'en prendre un autre, ce qui revient au même). Et tant qu'il ne gère pas nativement le type java.time.LocalDate, tu es obligé de convertir avec l'instruction que je t'ai donné (à la limite tu te fais une méthode statique utilitaire, que tu appelles partout où c'est nécessaire).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Hello Joël,

    J'avance, J'avance, j'ai une nouvelle question concernant ce post :

    Comment récupérer la date au format DD/MM/YYYY sacant que mon code ressemble à ça (c'est un copié/collé de ce que tu as fait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            Calendar calendar = GregorianCalendar.getInstance();
            calendar.setTime(jDCDu.getDate());
     
            calendar.set(Calendar.HOUR, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND,0);
            calendar.set(Calendar.AM_PM, Calendar.AM);
            calendar.set(Calendar.MILLISECOND,0);
     
            String dateDeb = calendar.getTime().toString();
    Merci d'avance.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Bon ! Ben ! En fait, j'ai trouvé. Je pense que ce matin je te test pour voir si je répond avant toi pour le moment je suis la gagnant mais t'inquiète ça va pas durer ! Donc j'ai fait ça et ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        SimpleDateFormat formatter = new SimpleDateFormat ("dd/MM/yyyy" );
        String dateDeb = formatter.format(jDCDu.getDate());
    @+ Joël

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/05/2007, 22h31
  2. (jsp) problème avec sql qui contient la date
    Par future dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 31/08/2005, 16h18
  3. problème avec strtok pour récupérer les vides
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 02/06/2005, 20h08
  4. Réponses: 5
    Dernier message: 27/08/2003, 11h45

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