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 :

Comparer 2 dates


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2015
    Messages : 1
    Par défaut Comparer 2 dates
    Bonjour ,

    J'aborde les langages orienté objet. J'ai pour exercice de créer des objets "date" dans une classe spéciale, puis de les comparer avec la date actuelle, puis les mettre dans le bon ordre. J'ai fais une classe pour entrer les dates, puis une pour la date actuelle. J'ai utilisé la librairie joda (juste pour voir...) et, enfin, je bloque sur la comparaison.
    Il y a problème pour comparer les objets et je ne sais pas comment m'y prendre. Si quelqu'un peu au moins m'orienter, ce serait sympa.
    Voila mes classes :
    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
     
    import org.joda.time.DateTime;
     
    public class Datemain {
    	private int day0;
    	private int month0;
    	private int year0;
     
    	public static Datemain createDatemain(){
    		DateTime tday = new DateTime();
    	    int d0=tday.getDayOfMonth();
    		int m0=tday.getMonthOfYear();
    		int y0=tday.getYear();
    		return  new Datemain(d0,m0,y0);
    	}
     
    	public Datemain (int day0, int month0 ,int year0){
    		this.day0=day0;
    		this.month0=month0;
    		this.year0=year0;
    	}
    	public String toString(){
    		return (year0+"/"+month0+"/"+day0);
    	}
    	public int getDay0() {
    		return day0;
    	}
    	public int getMonth0() {
    		return month0;
    	}
    	public int getYear0() {
    		return year0;
    	}
     
    	public static void main(String[] args) {
     
    		Datemain tday0 =Datemain.createDatemain();
    		System.out.println("la date du jour est : "+tday0);
     
    	}
    }
    la 2eme où j'initialise mes deux dates :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    import java.util.Scanner;
    import java.util.*;
     
     
    public class Dateinit {
     
    	private int day;
    	private int month;     //constructeur//
    	private int year;
     
     
    	public static Scanner sc = new Scanner(System.in);
     
    	public static Dateinit createDateInit(){
    		System.out.print(" jour :");
    		int j = sc.nextInt();
    		System.out.print(" mois :");                 //method creatDateInit renvoie un objet Dateinit
    		int m = sc.nextInt();		
    		System.out.print(" année :");
    		int a = sc.nextInt();		
     
    		return new Dateinit(a,m,j);
    	}
     
    	public Dateinit(int year,int month,int day){
    		this.day =day;
    		this.month =month;							//method Dateinit appellé dans method creatDateInit
    		this.year =year;
    	}
     
    	//public comapraisdion(Date date)
     
     
    	public String toString(){
    		return (year+"/"+month+"/"+day);
    	}
     
    	public static void main (String[]args){
    		Dateinit d1 = Dateinit.createDateInit();
    		System.out.println("-------");					//appellle de method "createDateInit" à partir du main pour crée les objet d2 et d1;
    		Dateinit d2 = Dateinit.createDateInit();;		
    		System.out.println(d1);
    		System.out.println(d2);
    	}
     
    	public int getDay() {
    		return day;
    	}
     
    	public void setDay(int day) {
    		this.day = day;
    	}
     
    	public int getMonth() {
    		return month;
    	}
     
    	public void setMonth(int month) {
    		this.month = month;
    	}
     
    	public int getYear() {
    		return year;
    	}
     
    	public void setYear(int year) {
    		this.year = year;
    	}
     
    	public int compareTo(Dateinit d1,Dateinit d2) {     //içi j'ai créer une method compareTo qui ne marche pas...//
    		int c1=Integer.parseInt(d1);
    		int c2=Integer.parseInt(d2);
    		if (d1 < d2)  return -1; 
    	      else if(d1 == d2) return 0; 
    	      else return 1; 
    		}
    }
    la classe où je veux mettre la méthode de comparaison usant de compareTo(au dessus , qui ne marche pas):
    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
     
    import java.util.*;
    public class Datecomp {
     
    		private static String d0;
     
     
    	public static void comparaison(Dateinit d1,Dateinit d2,Datemain tday,String tday0){
     
    		if (d1.compareTo(d2 ) == -1) {
    			// traitement du cas date1 < date2
    			System.out.print("cas 1");
     
    			}
     
    			if (d1.compareTo(d2 ) == 0) {
    			// traitement du cas date1 = date2
    				System.out.print("cas 2");
    			}
     
    			if (d1.compareTo(d2) == 1) {
    			// traitement du cas date1 > date2
    				System.out.print("cas 3");
    			} 
     
     
    	}
     
    	public static void main(String[]args){
    		String dd0=d0;
    		Dateinit dd1 = Dateinit.createDateInit();
    		System.out.println("===================");
    		Dateinit dd2 = Dateinit.createDateInit();
    		System.out.println("===================");
    		Datemain tdDay0 =Datemain.createDatemain();
    		System.out.println("===================");
    		System.out.println(dd1);
    		System.out.println(dd2);
    		System.out.println(tdDay0);
    		comparaison(dd1,dd2,tdDay0,dd0);
    	}
    }
    Voilà où j'en suis. Merci d'avance pour votre aide.

    PS Je dois faire deux classes au moins. Bien sûr, si vous avez plus simple et fonctionnel, ce n'est pas de refus.^^

  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,

    Déjà quelques questions :

    1. Tu dois vrament faire 2 classes, une pour une date quelconque, une pour la date du jour, c'est ça ?
    2. C'est une peu étrange d'avoir 2 classes indéependantes pour représenter un même type de données. Eventuellement, si tu dois vraiment faire 2 classes, je ferais une classe pour représenter n'importe quelle date, et une classe pour représenter aujourd'hui qui étend la première
    3. Pourquoi utiliser JodaTime ? Pour implémenter ses propres classes de date, pas besoin de JodaTime : autant utiliser (java.util.DatE/Calendar), ou, en Java 8, l'API java.time. JodaTime est pratique avant Java8 pour manipuler des dates, les comparer, etc... mais juste pour avoir la date du jour, c'est un peu too much, je trouve.
    4. T'a-t-on demandé d'implémenter Comparable, ou pas ?


    Ensuite, pour la méthode compareTo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public int compareTo(Dateinit d1,Dateinit d2) {     //içi j'ai créer une method compareTo qui ne marche pas...//
    int c1=Integer.parseInt(d1);
    int c2=Integer.parseInt(d2);
    if (d1 < d2)  return -1; 
    else if(d1 == d2) return 0; 
    else return 1; 
    }
    L'instruction int c1=Integer.parseInt(d1); est censée être utilisée si d1 est une chaîne de caractères qui contient que des chiffres et qu'on veut en obtenir une version sous forme de int. Rien à voir donc avec les dates.

    Ce que tu dois faire, c'est plutôt utiliser les méthodes que tu as créés dans Dateint pour récupérer jour, mois et année (getDay(), getMonth()...), pour pouvoir comparer ces valeurs, sur le principe :

    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
    annee1 = année de d1
    annee2 = année de d2
    si ( annee1==annee2 ) {
     
        // même année
     
        // on teste donc les mois, sur le même principe (puis les jours si les mois sont égaux)...
     
    }
    sinon {
     
        si ( annee1< annee2 ) {
     
             d1 avant d2
     
        }
        sinon (
     
             d2 avant d1
     
        }
     
    }
    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
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Ben alors là c'est vraiment l'exercice-piège car la vieille classe Date fait déjà tout cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Date date1 = new Date();
            Date date2 = new Date(date1.getTime()-758000);  // création d'une date 2 avant date 1
            System.out.println("date2 avant date1 ? " + date2.before(date1));
            System.out.println(date2.compareTo(date1)); // résultat attendu : -1 si date2 avant date1, 0 si date2 = date1,  1 si date2 après date1
    du coup, je m'interroge sur le sujet :
    J'ai pour exercice de créer des objets "date" dans une classe spéciale, puis de les comparer avec la date actuelle, puis les mettre dans le bon ordre
    si tu étends la classe Date, le travail est presque fait.
    tu n'as plus qu'à mettre tes dates dans un Arraylist et de faire un tri

    Est-ce que les notions à voir sont :
    - héritage
    - comparaison
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. Comparer des Dates (Access, jdbc)
    Par babylone7 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/07/2005, 10h01
  2. [DB2] - Comparer une date à la date système
    Par rémi_tounul dans le forum DB2
    Réponses: 3
    Dernier message: 19/05/2005, 11h45
  3. Comparer deux dates
    Par LoicH dans le forum C++Builder
    Réponses: 4
    Dernier message: 04/03/2005, 22h53
  4. [Date] Comparer des dates au format mySQL "date
    Par Marc_P dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 25/10/2004, 15h15
  5. 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