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 :

Manipulation des dates avec la classe Calendar


Sujet :

Langage Java

  1. #1
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut Manipulation des dates avec la classe Calendar
    Je n'arrive pas à comprendre le fonctionnement exact de certaines classes de Calendar. J'arrive pas à me retrouver dans la Javadoc
    1) Je veux afficher le jour auquel tombe une date choisie. Par exemple
    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
     Calendar cal = Calendar.getInstance();
    		cal.set(2011, 3, 1);
     
    		// AVEC UNE DATE SPECIFIQUE
     
    		if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY)
    		System.out.println("Cette date correspond à Lundi ");
    		if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY)
    		System.out.println("Cette date correspond à Mardi ");
    		if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)
    		System.out.println("Cette date correspond à Mercredi ");
    		if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY)
    		System.out.println("Cette date correspond à Jeudi ");
    		if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
    		System.out.println("Cette date correspond à Vendredi ");
    		if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY)
    		System.out.println("Cette date correspond à Samedi ");
    		if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
    		System.out.println(" Cette date correspond à Dimanche ");
    Mais le problème est que ce code ne marche que pour le mois en cours, toute autre date affiche un résultat erronné.

    2) Quel est le rôle de la méthode (Calendar.DAY_OF_WEEK). La valeur qu'il renvoie représente quoi exactement ? Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Calendar c = Calendar.getInstance();
    	c.set(2011, 02,16);
    	System.out.println("Le jour de la semaine est : " + c.get(Calendar.DAY_OF_WEEK));
    Ce qui me renvoi 4 et je ne comprend pas pourquoi.
    Ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Date d1 = new Date(1000000000000L); //un milliard de millisecondes après le 1er,Jan 1970
    	System.out.println("Cette date tombe le :  " + d1.toString());
    	Calendar c = Calendar.getInstance();
    	c.setTime(d1);
    	System.out.println("Le jour de la semaine tombe le: " + c.get(Calendar.DAY_OF_WEEK));
    Ici jai 1 comme deuxième résultat que je n'arrive pas à interpréter.

    Merci

  2. #2
    Expert éminent sénior
    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
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par mesken Voir le message
    Mais le problème est que ce code ne marche que pour le mois en cours, toute autre date affiche un résultat erronné.
    Peux tu donner un exemple qui démontre ça?

    2) Quel est le rôle de la méthode (Calendar.DAY_OF_WEEK). La valeur qu'il renvoie représente quoi exactement ?
    Le jour de la semaine, suivant les constante Calenda.SUNDAY, Calendar.MONDAY, etc
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Calendar c = Calendar.getInstance();
    	c.set(2011, 02,16);
    	System.out.println("Le jour de la semaine est : " + c.get(Calendar.DAY_OF_WEEK));
    Ce qui me renvoi 4
    et je ne comprend pas pourquoi.
    4 = la constante pour mercredi (Calendar.WEDNESDAY)

    Ici jai 1 comme deuxième résultat que je n'arrive pas à interpréter.

    Merci
    Toujours pareil, 1 = constante pour Calendar.SUNDAY

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 619
    Points
    21 619
    Par défaut
    J'ajoute qu'il vaut mieux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cal.set(2011, Calendar.APRIL, 1);
    au lieu de

    cal.set(2011, 3, 1);

    C'est beaucoup plus clair avec les constantes. J'en veux beaucoup aux concepteurs de cette interface, d'avoir identifié les mois avec d'autres numéros que leur numéro calendaire.

  4. #4
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    Voilà !!!!!!!! ça marche avec cal.set(2011,Calendar.APRIL,16) et non avec cal.set(2011,4,16).
    Par rapport aux exmplications que tu as données tchize_ c'est effectivement ce que je pensais, que ces chiffres représentaient chacun une valeur de la semaine, mais je ne comprenais pas mes résultats et c'est ça qui m'inquiètait. Lorsque tu demandes une exemple !
    Peux tu donner un exemple qui démontre ça?
    C'est effectivement ce que j'ai donné plus haut.
    Nous savons tous par exemple que le 16 Avril 2011, c'est un Samedi. Voici l'exemple :
    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
    public class TesterDate {
     
        public static void main(String[] args) {
     
            Calendar cal = Calendar.getInstance();
            cal.set(2011,4,16);
     
            if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY)
    	System.out.println("Le jour de la semaine de cette date correspond à Lundi ");
            if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY)
     	System.out.println("Le jour de la semaine de cette date correspond à Mardi ");
            if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)
    	System.out.println("Le jour de la semaine de cette date correspond à Mercredi ");
            if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY)
    	System.out.println("Le jour de la semaine de cette date correspond à Jeudi ");
            if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
    	System.out.println("Le jour de la semaine de cette date correspond à Vendredi ");
            if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY)
    	System.out.println("Le jour de la semaine de cette date correspond à Samedi ");
            if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
    	System.out.println("Le jour de la semaine de cette date correspond à Dimanche ");
     
            System.out.println(cal.get(Calendar.DAY_OF_WEEK));
     
          }
     
    }
    En tout cas je ne sais pas ce qui se passe chez vous, mais à mon niveau le résultat produit les deux lignes suivantes :
    Le jour de la semaine de cette date correspond à Lundi
    2

    Et tu peux le tester avec n'importe quelle date autre que la date du mois en cours.
    Pourtant tel que thelvin le disais, ça marche parfaitement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cal.set(2011,Calendar.APRIL,16)
    et il affiche normalement :
    Le jour de la semaine de cette date correspond à Samedi
    7

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Points : 480
    Points
    480
    Par défaut
    Bonjour,

    Je crois que c'est simplement parce que la valeur 4 ne correspond pas à avril mais à mai.
    En effet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JANUARY = 0
    ....
    APRIL = 3
    ....
    La valeur des constantes pour les mois commence à 0. Donc ton calcul est décalé d'un mois.

    A+

  6. #6
    Expert éminent sénior
    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
    Points : 48 807
    Points
    48 807
    Par défaut
    sauf que ça

    c'est le 16 MAI! Et le 16 MAI est bien un lundi

    D'ailleur la doc de set est explicite à ce sujet
    set

    public final void set(int year, int month, int date)

    Sets the values for the fields year, month, and date. Previous values of other fields are retained. If this is not desired, call clear first.

    Parameters:
    year - the value used to set the YEAR time field.
    month - the value used to set the MONTH time field. Month value is 0-based. e.g., 0 for January.
    date - the value used to set the DATE time field.
    edit: grillé

  7. #7
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    Ok, merci beaucoup, je comprend maintenant.
    PAR AILLEURS :
    J'aimerais faire la diffénce de deux dates et renvoyer le résultat selon qu'il se présente. C'est-à-dire
    Si j'ai Date1 (2011,4,24,15,45,28) et Date2(2011,9,12,17,27,8) et que je veux renvoyer la différence entre les deux date.
    Il fautdrait que si la différence n'es qu'en années, qu'il affiche (x) annnées tout court, si elle inclu les mois, qu'il affiche (x) années (x) mois, si elle inclu des jours, qu'il affiche (x) années (x) mois (x) jours.... ainsi de suite jusqu'aux seconde.

    Quelqu'un a-t-il une idée ou alors il y a-t-il une fonction qui gère ça rapidement ?

  8. #8
    Expert éminent sénior
    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
    Points : 48 807
    Points
    48 807
    Par défaut
    bon courage avec le calendar. Il faudrait:

    1) déterminer quelle est la date la plus petite.
    2) ajouter une année à la plus petite date jusqu'à dépasser la grande date, revenir en arrière de 1
    3) ajouter un mois à la plus petite date jusqu'à dépasser la grande date, revenir en arrière de 1
    4) idem avec jour, heure, minute, second, milliseconde.
    5) a partir de toutes tes valeurs, tu a l'information, reste à construire ta string.

    Note que jodatime est réputé pour être plus pratique de ce coté là

  9. #9
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    Merci beaucoup, c'est intéressant de ce côté là. Mais s'il vous plait, c'est la première fois que j'essaie d'importer une Librairie dans Eclipse. Comment faire ?

    1) J'ai télécharger Jodatime
    2) J'ai déziper dans un répertoire où j'ai eu 3 JAR (joda-time-1.6.2.jar , joda-time-1.6.2-javadoc.jar , joda-time-1.6.2-sources.jar)
    3) J'ai importer tous ces 3 JAR sous Eclipse en utilisant la procédure suivante : Windows-->Preferences-->Java-->Build Path-->User Librairies

    Mais lorsque je fais un import org.jada.*; ça ne marche pas. Il y a-t-il une étape de plus ?

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 619
    Points
    21 619
    Par défaut
    C'est au minimum org.joda.time.* et cela n'inclura pas les sous-packages.

    Pour le coup, apprendre un peu les import, et comment se passer de mettre * dedans, va commencer à te servir.

  11. #11
    Expert éminent sénior
    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
    Points : 48 807
    Points
    48 807
    Par défaut
    aussi, ce n'est pas là qu'il faut les ajouter dans eclipse, c'est dans le projet, tu fais un répertoire lib/ tu y met le jodatime.jar, bouton droit dessus -> add to build path

  12. #12
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    Je n'arrive pas à me retrouver depuis ton dernier message tchize_. Dans le répertoire de mon projet par exemple (GESTION), j'ai créer un repertaoir lib dans lequel j'ai mis jodatime.jar. Un clique droit sur lib ou sur jodatime.jar ne m'affiche que le menu contextuel de Windows, rien de plus. Comment ajouter ça au Parth ?

  13. #13
    Expert éminent sénior
    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
    Points : 48 807
    Points
    48 807
    Par défaut
    c'est dans eclipse qu'il faut faire le clic droit

  14. #14
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    C'est la première fois que j'essaie de le faire, donc soit un peu patient
    Effectivement j'y ai pensé, mais quand je crée le répertoire lib dans le répertoire de mon projet, je ne le vois donc pas apparaître dans Eclipse, c'est ça le problème.

  15. #15
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    Merci, ça marche, il me fallait créer le répertoire à partir d'Eclipse tout simplement

Discussions similaires

  1. [XL-2010] Manipuler des dates avec Find
    Par utan88 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/02/2011, 09h48
  2. [JDBC] manipulation des dates/heures en Java
    Par kurkLord dans le forum JDBC
    Réponses: 6
    Dernier message: 09/08/2004, 12h49
  3. Manipulations des Dates
    Par kurtc dans le forum Langage SQL
    Réponses: 11
    Dernier message: 13/04/2004, 14h39
  4. [IB6][BCB5]Manipulation des dates.
    Par Sitting Bull dans le forum SQL
    Réponses: 4
    Dernier message: 09/04/2004, 15h33
  5. Manipuler des dates...
    Par Ti Jen-tsie dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2003, 11h46

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