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 :

Comment comparer 2 date en java? (date1>=date2)


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut Comment comparer 2 date en java? (date1>=date2)
    Bonjour,

    Je suis débutant en Java et j'ai un formulaire jsp sur lequel il y a un champ date. Je voudrais mettre une condition sur ce champ: la date renseigné doit être supérieur ou égale à la date actuelle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(dateRenseigner.compareTo(dateJour)<0 || dateRenseigner.compareTo(dateJour)!=0){
     
       message d'erreur
    {
    En fait, le premier test (dateRenseigner.compareTo(dateJour)<0) fonctionne. Mais quand je choisi une date egal à la date du jour, elle me renvoi le message erreur pourtant c'est pas ce que je veux. Comment adapter ça afin qu'il respecte ma condition ? Merci par avance de votre aide ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Par défaut
    Salut,

    Déjà, de quelles classes les objets dateRenseigner et dateJour sont-ils des instances?

    Si c'est du java.util.Date, tu as les méthodes before() et after() qui peuvent faire l'affaire.

    Attention toutefois à comment tu initialises les objets.

    Si tu fais genre un new Date() pour dateRenseigner, alors c'est initialisé avec l'heure actuelle.

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

    Tout d'abord le test dateRenseigner.compareTo(dateJour)<0 est inutile, si tu as le test dateRenseigner.compareTo(dateJour)!=0, puisque c'est inférieur à 0 alors c'est forcément différent de 0, et que tu fais un OU.

    Ensuite, tu voudrais afficher un message d'erreur si la date renseignée ne valide pas une condition, donc il faudrait un test du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( !dateValide(dateRenseignee) ) {
        afficherMessageErreur();
    }
    la date doit être valide si : dateRenseignée >= dateDuJour. Donc elle est invalide si dateRenseigné<dateDuJour parce que "non >=" c'est "<". dateRenseignée.compareTo(dateDuJour) retourne -1 si dateRenseignée est inférieure à dateDuJour.

    Donc ça pourrait être ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(dateRenseignee.compareTo(dateDuJour)<0 ){
     
       afficherMessageErreur();
    }
    Seulement, il y a un souci : un java.util.Date comprend une date, mais aussi des heures, des minutes, des secondes...

    Pour avoir la date du jour, tu fais probablement un new Date(), ce qui est la date à la heure exacte du moment de l'exécution du new Date(). Or si tu saisie une date par un String et que tu la convertis par un DateFormat, tu vas avoir un date au jour voulu, mais à l'heure de 00h00m00s, une date forcément inférieur à new Date(), dès que tu as passé minuit.

    Pour résoudre ça, il faudrait que dateDuJour n'ait pas d'heures minutes secondes non plus. On peut créer un Date comme ça, en utilisant un DateFormat, ou supprimer les heures, minutes et secondes, en utilisant la classe Calendar.

    Il y a également l'API Java Time (java.time.*) qui permet de faire ce genre de chose plus facilement. En utilisant la classe LocalDate, et la méthode isBefore() ou isAfter().

    Tu peux convertir la date saisie par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LocalDate date = dateRenseignee.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    obtenir la date actuel par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LocalDate dateDuJour = LocalDate.now();
    Et comparer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( date.isBefore(dateDuJour) ) {
          afficherMessageErreur();
    }
    En plus, en lisant le code, on comprend beaucoup mieux ce qu'on fait.
    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
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut
    Citation Envoyé par Carhiboux Voir le message
    Salut,

    Déjà, de quelles classes les objets dateRenseigner et dateJour sont-ils des instances?

    Si c'est du java.util.Date, tu as les méthodes before() et after() qui peuvent faire l'affaire.

    Attention toutefois à comment tu initialises les objets.

    Si tu fais genre un new Date() pour dateRenseigner, alors c'est initialisé avec l'heure actuelle.


    Classe java.util.Date,


    Avant d'utiliser CompareTo(), j'avais d'abord testé ceci mais pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Date dateJour = new Date();
    Date dateRenseigner = t.madate;
    if(dateRenseigner.before(dateJour)|| !dateRenseigner.equals(dateJour)){
     
       message d'erreur
    {

  5. #5
    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 : 45
    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
    comme on l'a mentionné, les objet Date incluent l'heure. Donc vu ton code, il y a très peu de chances que t.madate corresponde à l'instant présent à la milliseconde près.

    Si tu veux utiliser des dates sans heure, oriente toi plutôt vers la classe java.time.LocalDate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LocalDate dateJour = LocalDate.now();
    LocalDate dateRenseigner = t.madate;
    if(!dateRenseigner.equals(dateJour)){
      System.out.println("ce n'est pas aujourd'hui");
    }

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut
    Super!! @joel.drigo

    Merci pour tout ces explications. Sa fonctionne coe un TGV tout neuf

    Je comprend j'ai encore à faire pour comprendre la manipulation de l'objet Date.

    Merci.

  7. #7
    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 : 45
    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 Piker Voir le message
    Super!! @joel.drigo

    Merci pour tout ces explications. Sa fonctionne coe un TGV tout neuf
    Comme le Paris - Toulouse?

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Piker Voir le message
    Je comprend j'ai encore à faire pour comprendre la manipulation de l'objet Date.
    Pour information, c'est de leur faute si c'est si difficile à prendre en main. Ils sont assez mal conçus et n'aident pas du tout le programmeur à faire son travail.

    C'est pour ça que tu as reçu le conseil de regarder java.time.LocalDate. Ça c'est bien.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [Dates] Comment comparer 2 dates en PHP ?
    Par tigzirt dans le forum Langage
    Réponses: 8
    Dernier message: 10/08/2010, 16h03
  2. Comment comparé une date dans une requête?
    Par ghan77 dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/04/2006, 10h22
  3. Comment comparer deux dates
    Par vodevil dans le forum Modules
    Réponses: 6
    Dernier message: 01/09/2005, 18h24
  4. comment comparer deux dates?
    Par billoum dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/08/2004, 21h08

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