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

Langage Java Discussion :

Comparer deux dates


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Par défaut Comparer deux dates
    Bonjour à tous,

    J'ai un problème de comparaison de dates, date.equalsto(date) ou date.compareto(date), les deux ne fonctionnent pas.

    J'utilise d'abord une classe holiday :

    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
    public class Holiday {
     
    	private int jour;
    	private int mois;
     
    	public Holiday(int j, int m) {
    		this.jour = j;
    		this.mois = m;
    	}
     
    	public void setJour(int jour) {
    		this.jour = jour;
    	}
    	public int getJour() {
    		return jour;
    	}
    	public void setMois(int mois) {
    		this.mois = mois;
    	}
    	public int getMois() {
    		return mois;
    	}
     
     
    }
    et une classe holidays :


    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    public class Holidays {
     
    	private Holiday H1 = new Holiday(0,0);
    	private Holiday H2 = new Holiday(0,4);
    	private Holiday H3 = new Holiday(7,4);
    	private Holiday H4 = new Holiday(13,6);
    	private Holiday H5 = new Holiday(14,7);
    	private Holiday H6 = new Holiday(0,10);
    	private Holiday H7 = new Holiday(10,10);
    	private Holiday H8 = new Holiday(24,11);
     
    	private Vector Holidays = new Vector();
     
    	public Holidays(Date sDate, Date eDate) {
     
    		GregorianCalendar gc = new GregorianCalendar();
    		gc.setTime(sDate);
    		int year1 = gc.get(Calendar.YEAR);
    		gc.setTime(eDate);
    		int year2 = gc.get(Calendar.YEAR);
     
    		for (int i = year1 ; i <= year2 ; i++ ) {
    			gc.set(H1.getJour(), H1.getMois(), i);
    			Holidays.addElement(gc.getTime());
    			gc.set(H2.getJour(), H2.getMois(), i);
    			Holidays.addElement(gc.getTime());
    			gc.set(H3.getJour(), H3.getMois(), i);
    			Holidays.addElement(gc.getTime());
    			gc.set(H4.getJour(), H4.getMois(), i);
    			Holidays.addElement(gc.getTime());
    			gc.set(H5.getJour(), H5.getMois(), i);
    			Holidays.addElement(gc.getTime());
    			gc.set(H6.getJour(), H6.getMois(), i);
    			Holidays.addElement(gc.getTime());
    			gc.set(H7.getJour(), H7.getMois(), i);
    			Holidays.addElement(gc.getTime());
    			gc.set(H8.getJour(), H8.getMois(), i);
    			Holidays.addElement(gc.getTime());
    			Calendar easter = Easter.findHolyDay(i);
    			gc.setTime(easter.getTime());
    			Holidays.addElement(gc.getTime());
    			gc.add(Calendar.DAY_OF_YEAR, 39);
    			Holidays.addElement(gc.getTime());
    		}
     
     
    	}
     
    	public boolean dateisHoliday(Date d) {
    		boolean success = false;
     
    		for (int i = 0 ; i < Holidays.size() ; i++) {
    			if (d.compareTo(Holidays.elementAt(i)) == 0) {
    				success = true;
    			}
    		}
     
    		return success;
     
    	}

    Le problème vient de ma ligne : d.compareTo(Holidays.elementAt(i) dans la methose dateisHoliday(Date d).

    Est-ce parce à cause de mon vector ?
    Si vous avez une idée.

    Merci beaucoup.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Par défaut
    Le problème doit être dans cette méthode. En effet, tu continues à boucler même si tu tombe sur une date valide. La méthode ne retourne vrai que si la date que tu passes correspond au dernier élément du tableau des vacances. et faux dans tous les autres cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public boolean dateisHoliday(Date d) {
        boolean success = false;
     
        for (int i = 0 ; i < Holidays.size() ; i++) {
            if (d.compareTo(Holidays.elementAt(i)) == 0)
                success = true;
        }
     
        return success;
     
    }
    Essaye avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public boolean dateisHoliday(Date d) {
        for (int i = 0 ; i < Holidays.size() ; i++) {
            if (d.compareTo(Holidays.elementAt(i)) == 0)
                return true;
        }
        return false;
    }
    Petit conseil au passage. Pour manipuler des Calendar, il est préférable d'utiliser la classe abstraite Calendar et la factory qu'elle contient pour avoir des instances qui sont initialisées en fonction de la locale avec laquelle la JVM démarre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Calendar calendar = Calendar.getInstance();
    Si tu est en locale fr_FR par exemple, tu obtiendras bien un GregorianCalendar.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Par défaut
    Bonjour,

    Merci pour vos réponse.

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

Discussions similaires

  1. Comment comparer deux dates
    Par vodevil dans le forum Modules
    Réponses: 6
    Dernier message: 01/09/2005, 18h24
  2. comparer deux dates
    Par adel25 dans le forum C++
    Réponses: 3
    Dernier message: 23/08/2005, 20h29
  3. Comparer deux dates
    Par LoicH dans le forum C++Builder
    Réponses: 4
    Dernier message: 04/03/2005, 22h53
  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