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

AWT/Swing Java Discussion :

Q: Comparaison de deux instants JFormattedTextField HH:mm


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut Q: Comparaison de deux instants JFormattedTextField HH:mm
    Bien le bonjour.

    Quelqu'un aurait "sous la main" le code éprouvé d'une méthode examinant si un instant (exprimé en HH:MM) est compris entre deux valeurs de HH:MM et renvoyant true|false ?

    Merci d'avance.
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Ouuhh le flemmard

  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
    Salut,

    tu peux éventuellement convertir tes HH:mm en java.util.Date avec un SimpleDateFormat et utiliser les méthode before et after de Date.
    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
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut
    Bonjour Nico02.
    Flemmard, flemmard ... on soupçonne bien des complications et nombre de questions surgit quand on lit préalablement le "How to JFormattedTextField", le Formatter
    et qu'on pense à la nécessité d'un JSpinner
    et que c'est la première fois
    et qu'il faut préparer sa valise pour partir en vacances ...

    Bonjour Joël.drigo et merci pour le conseil.

    Problème : Q1: Comment attribuer une valeur à un textField casté plus loin à un java.util.Date ? Pas d'erreur à la compilation (Java !), mais au 'run-time' :
    Cannot format given Object as a Date
    ou encore
    java.lang.String cannot be cast to java.util.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
            ...
        private JFormattedTextField textField5, textField6;
        private Date date_JAETHC, heure_DébutHPl, heure_FinHPl;
            ...
            label10 = new JLabel();         // Heures à plein tarif : de
            SimpleDateFormat formatDHeure = new SimpleDateFormat("HH:mm");
            textField5 = new JFormattedTextField(formatDHeure);
            heure_DébutHPl = new Date();
            textField5.setValue("07:00");   // Cannot format given Object as a Date
            textField5.setColumns(4);
            ...
                heure_DébutHPl = (java.util.Date) textField5.getValue();
                heure_FinHPl = (java.util.Date) textField6.getValue();
                Date heureTable = (java.util.Date) monModèleDeTable.getValueAt(2, 1);
     
                if ((heureTable.equals(heure_DébutHPl) || heureTable.after(heure_DébutHPl))
                     && (heureTable.before(heure_FinHPl)))
                    System.out.println("Heures pleines");
                else
                    System.out.println("Heures creuses");
    Q2: Comment ne filtrer que "11:15" p.ex. d'un Date comprenant tous ses attributs (YY/mm/dd HH:mm:ss ...CET ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date heureTable = (java.util.Date) monModèleDeTable.getValueAt(2, 1);
    Enfait, je cherche à savoir comparer rien que des HH:MM , qu'ils soient des String's ou des Date's.
    Merci d'avance.
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

  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 Chavadam Voir le message

    Problème : Q1: Comment attribuer une valeur à un textField casté plus loin à un java.util.Date ? Pas d'erreur à la compilation (Java !), mais au 'run-time' :
    Je ne comprends pas la question. Comment attributer une valeur à un JFormattedTextField (par setValue() donc) ou comment attribuer une valeur à un java.util.Date (setTime() ou passer par un Calendar) ?

    Caster ? Caster quoi en quoi ? Un java.util.Date en JFormattedTextField ? Non, pas possible : ces 2 classes n'ont rien à voir (la seule classe en commun de leur hiérarchie, c'est java.lang.Object !)

    Citation Envoyé par Chavadam Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            ...
          if ((heureTable.equals(heure_DébutHPl) || heureTable.after(heure_DébutHPl))
              ...
    Attention, si le before() et le after() peuvent marcher pour comparer des heures/minutes en comparant des dates, mais pour l'égalité vaut mieux éviter de la comparer par equals(), car il faut que les données soit exactement égales, donc les heures, les minutes, mais aussi les jours, les années, ainsi que les millisecondes, etc... !!!

    Citation Envoyé par Chavadam Voir le message

    Q2: Comment ne filtrer que "11:15" p.ex. d'un Date comprenant tous ses attributs (YY/mm/dd HH:mm:ss ...CET ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date heureTable = (java.util.Date) monModèleDeTable.getValueAt(2, 1);
    Il y'a une date quelconque c'est ça dans ton modèle ? Soit tu utilises Calendar et tu peux récuper que l'heure et les minutes, soit tu formates et tu récupères tes heures et minutes, sous forme de chaines de char, sous la forme justement "HH:mm". Mais c'est un peu un hack. Surtout si c'est pour repasser en heure et minutes derrière pour comparer. A ta première question, je pensais que tu avais des chaines en entrée : c'est pour ça que j'ai parlé de SimpleDateFormat, pour obtenir des java.util.Date à comparer.

    Là tu pars d'un JFormattedTextField qui te permettent de récupérer directement un java.util.Date, tu as des java.util.Date dans tes données, et tu peux extraire l'heure et les minutes de tes dates par un Calendar.

    Ensuite, on peut facilement écrire une comparaison d'heures et minutes stockées dans 2 int (comparaison en cascade, si les heures sont égales, on compare les minutes, sinon on compare les heures, et pour l'intervalle, on comparer à la borne inférieur, et à la borne supérieur, en pensant à la problématique du repassage à zéro des heures à minuit, si ce cas est possible avec tes données)



    [/quote]
    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
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Chavadam Voir le message

    Problème : Q1: Comment attribuer une valeur à un textField casté plus loin à un java.util.Date ? Pas d'erreur à la compilation (Java !), mais au 'run-time'
    setValue() prend un objet convertissable en String via le formatter passé en paramètre. Il ne prend pas directement une String. donc le code devrait être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            SimpleDateFormat formatDHeure = new SimpleDateFormat("HH:mm");
            JFormattedTextField textField5 = new JFormattedTextField(formatDHeure);
            textField5.setValue(formatDHeure.parseObject("07:00"));   // Et la ça marche
    Q2: Comment ne filtrer que "11:15" p.ex. d'un Date comprenant tous ses attributs (YY/mm/dd HH:mm:ss ...CET ...)
    A la main: splitter sur les espace et les :

    Pourquoi? Parce que si tu te contente de parser le tout avec un formatter, un java.util.Date n'as pas de timezone, il est sur la timezone GMT, donc si l'heure était formatté en CET, tu risque de perdre 1 à 2 h en rammenant à GMT.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut
    Bonjour Joël.Drigo et Tchize,
    et merci pour vos réponses qui m'ont permis d'aboutir.
    Zyeutez un peu la solution :
    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
        private SimpleDateFormat formatDHeure;
        private Date heure_DébutHPl, heure_FinHPl, heureTable;
        ...
            formatDHeure = new SimpleDateFormat("HH:mm");
            label10 = new JLabel();         // Heures à plein tarif : de
            textField5 = new JFormattedTextField(formatDHeure);
            heure_DébutHPl = new Date();
            try { textField5.setValue(formatDHeure.parseObject("07:00")); } 
                catch (ParseException e) { System.out.println(e); }
             textField5.setColumns(4);
            textField5.setHorizontalAlignment(JTextField.CENTER);
     
            label11 = new JLabel();         // à
            textField6 = new JFormattedTextField(formatDHeure);
            heure_FinHPl = new Date();
            try { textField6.setValue(formatDHeure.parseObject("21:00")); } 
                catch (ParseException e) { System.out.println(e); }
            textField6.setColumns(4);
            textField6.setHorizontalAlignment(JTextField.CENTER);
     
            heureTable = new Date();
        ...
                    String valeurPuissHasard = monModèleDeTable.getValueAt(3, 1).toString();    // HH:mm soumis au test
     
                    heure_DébutHPl = (java.util.Date) textField5.getValue();  // Found : Object --> cast
                    heure_FinHPl   = (java.util.Date) textField6.getValue();
                    try { heureTable = (java.util.Date) formatDHeure.parseObject(valeurPuissHasard); } 
                        catch (ParseException err) { System.out.println(err); }
     
                    if ((heureTable.after(heure_DébutHPl) /* || heureTable.equals(heure_DébutHPl) */)
                         && (heureTable.before(heure_FinHPl)))
                        System.out.println("En heures pleines : " + heureTable);
                    else
                        System.out.println("En heures creuses : " + heureTable);
         ...
    J'espère que ce code servira à d'autres 'bleus en Java'.
    En fait, cette discussion est à sortir de 'AWT/Swing et à déplacer vers 'Général Java'.
    Merci encore, surtout à Tchize (une fois de plus).
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

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

Discussions similaires

  1. Comparaison de deux float
    Par MysticKhal_0 dans le forum C
    Réponses: 5
    Dernier message: 14/09/2012, 01h08
  2. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  3. [langage] Comparaison de deux fichiers
    Par perlgirl dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 16h05
  4. [SYBASE] Comparaison de deux datetime
    Par paf15 dans le forum Sybase
    Réponses: 1
    Dernier message: 17/04/2005, 16h51
  5. Réponses: 5
    Dernier message: 06/10/2003, 17h49

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