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 :

probleme avec isAfter() ou isBefore() comparer deux valeurs de type date


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut probleme avec isAfter() ou isBefore() comparer deux valeurs de type date
    Salut a tous

    j'ai un soucis lorsque je veux comparer deux valeurs de type date , mon programme considéré quelque soit le valeur que je récupère depuis ma base de donnée elle est toujuors (Before) l'heure actuel
    je vous explique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       try {
     
                                JSONObject jsonObj = new JSONObject(response);
                                JSONArray jsonArray = jsonObj.getJSONArray("trainhor");
     
     
     
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    jresponse2 = jsonArray.getJSONObject(i);
                                   heureC = jresponse2.getString("HeureC");
                                    heureA =jresponse2.getString("HeureA");
                                    etat = jresponse2.getString("etat") ;
    j'ai récupérer la valeur HeureA depuis ma base en String et je l'ai converti en Date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     final DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd  hh:mm:ss");
     date12 = dateFormat.parse(heureA);
    et je l'ai comparé avec la date du jour (heure actuel)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      final Date date = new Date();
     (date12.after(date))
    maintenant quelque soit la valeur de HeureA (date12), il la considère toujours Before (avant) l'heure actuel
    par exmple il est 10:12:00 si je met dans ma base HeureA = 12:00:00
    il considère que 12:00:00 is before 10:12:00 !!!

  2. #2
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu parles de format "yyyy.MM.dd hh:mm:ss" et de valeur "12:00:00" : il y a déjà une incohérence, puisque la valeur n'est pas parsable par le format. Donc quelle est exactement la valeur et quel est le format que tu utilises vraiment ? Ensuite avec hh, une valeur de 12 correspond à minuit : utilise HH au lieu de hh.
    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.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut
    Salut Joel

    même en essayant avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      final DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    il considère toujours que HeureA (date12) is before l'heure actuel (14:10)
    voici les valeur de HeureA depuis ma base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    18:46:00,  19:26:00   ,   23:59:00   ,   20:16:00   ,  11:00:00

  4. #4
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas ce que j'ai dit de faire. Jai juste demandé "quelle est exactement la valeur et quel est le format que tu utilises vraiment"...

    S'il n'y a pas de date dans le format et dans la chaîne à parser, alors la date est celle du 1er janvier 1970. Donc une date qui est toujours avant celle d'aujourd'hui (à moins de remonter le temps avant le 1er janvier 1970 !)

    Si tu veux comparer des heures, il te faut une base de date identique, pour comparer les heures. Il faudrait donc forcer la date d'un côté ou de l'autre. En Java avant la version 8, il fallait utiliser une classe assez lourde, appelée Calendar, ou faire des bidouilles avec les chaînes de caractères (du patching). C'est pour ça que, dans l'autre fil, je t'ai donné la solution avec des LocalTime. Maintenant, depuis, on a déterminer que tu programmes sous Android, et non Java 8 SE. Je ne sais pas s'il y a un moyen simple de faire ça avec le SDK Android.
    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.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut
    Citation Envoyé par joel.drigo Voir le message

    S'il n'y a pas de date dans le format et dans la chaîne à parser, alors la date est celle du 1er janvier 1970. Donc une date qui est toujours avant celle d'aujourd'hui (à moins de remonter le temps avant le 1er janvier 1970 !)
    Merci Joel pour l’idée c'est bon j'ai changé le type de la valeur HeureA qu'elle est dans ma base en 'DateTime' je l'ai converti
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    et puis j'ai comparé après et ça fonctionne

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

Discussions similaires

  1. [AC-2003] Comparer deux valeurs suivi d'actions
    Par Popperwin dans le forum VBA Access
    Réponses: 5
    Dernier message: 27/05/2009, 10h23
  2. [XL-2007] comparer deux valeurs issues de userform différentes
    Par labo33 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/05/2009, 22h13
  3. Comparer deux valeurs avec javascript (td caché et zone de texte)
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/01/2009, 12h57
  4. [MySQL] Comparer deux valeurs depuis deux tables
    Par jbidou88 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/03/2008, 14h20
  5. Comparer deux valeurs d'un champ
    Par goulhasch dans le forum Macro
    Réponses: 7
    Dernier message: 13/09/2007, 09h44

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