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

Collection et Stream Java Discussion :

[Calendar] Ajouter un nombre de mois sur une date


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut [Calendar] Ajouter un nombre de mois sur une date
    Bonjour,
    je voudrais rajouter un nombre de mois donnée sur une date, le problème c'est qu'il faut qu'a un moment j'incrémente l'année

    Mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ArrayList<Date> listDate = new ArrayList<Date>();
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.set(2009, 1, 1);
    for(int i=1;i<this.nbMoisAfficher+1;i++)
    {
        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)+i);
        listDate.add(calendar.getTime());
    }

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Si j'ai bien compris ton problème, il te suffit de lire la Javadoc du GregorianCalendar et de sa classe mère Calendar. La méthode add devrait te donner la solution.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Bonjour,

    GregorianCalendar a une méthode add(int field, int amount) qui permet de faire cela sans avoir à penser à changer l'année lorsqu'il le faut.

    Attention néanmoins, le mois de janvier c'est 0, pas 1 donc dans ton exemple tu initialises ton calendar au 1er février. Mieux vaut utiliser GregorianCalendar.JANUARY.

  4. #4
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    Merci pour vos réponse. J'initialise mon calendare a 1 c'est juste pour les tests
    J'ai implémenter la fonction add mais je me retrouve avec des résultats bizarre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ArrayList<Date> listDate = new ArrayList<Date>();
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.set(2009, 1, 1);
    for(int i=1;i<this.nbMoisAfficher+1;i++)
    {
        calendar.add(Calendar.MONTH,+i); //Ici mon Calendar.MONTH==2 :?
        listDate.add(calendar.getTime());
    }
    Résultat:

    pour nbMoisAfficher = 12

    Wed Jul 01 15:43:57 CEST 2009,
    Tue Sep 01 15:43:57 CEST 2009,
    Tue Dec 01 15:43:57 CET 2009,
    Thu Apr 01 15:43:57 CEST 2010,
    Wed Sep 01 15:43:57 CEST 2010,
    Tue Mar 01 15:43:57 CET 2011,
    Sat Oct 01 15:43:57 CEST 2011,
    Fri Jun 01 15:43:57 CEST 2012,
    Fri Mar 01 15:43:57 CET 2013,
    Wed Jan 01 15:43:57 CET 2014,
    Mon Dec 01 15:43:57 CET 2014,
    Tue Dec 01 15:43:57 CET 2015

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Donne le code complet pour reproduire le problème.

  6. #6
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    c'est le code complet de ma méthode

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Et donc, quel est le problème ?
    J'imagine que tu souhaites avoir les mois consécutifs ?
    Alors il faut ajouter un seul mois à chaque itération de boucle au lieu de "i".

  8. #8
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    oui je veux que les mois se suivent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=1;i<this.nbMoisAfficher+1;i++)
    {
        calendar.add(Calendar.MONTH,1); 
        listDate.add(calendar.getTime());
    }

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Juste pour info
    Bonjour à tous,

    Comme le GregorianCalendar, Calendar et autres ne fonctionnent pas chez moi (pourquoi ??), je me suis créé les fonctions suivantes pour jouer avec les jours et les minutes directement avec des objets Date :

    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
     
     
    // Pour creer une date au format americain yyyy/MM/dd
    	public static Date dateParse(String stringDate) {
    		return DateTimeFormat.getFormat("yyyy/MM/dd").parse(stringDate);
    	}
     
    // Pour creer une heure au format HH:mm
    	public static Date timeParse(String stringTime) {
    		return DateTimeFormat.getFormat("HH:mm").parse(stringTime);
    	}
     
    // Pour ajouter X minutes a la date fournie en parametre
    	public static Date addMinutes(Date date, int minutes) {
    		date.setTime(date.getTime() + 1000 * 60 * minutes);
    		return date;
    	}
     
    // Pour ajouter un jour en millisecondes, ceci necessite de diviser au
    // prealable par 1000 pour ne pas depasser la limite des Integer et
    // obtenir une valeur negative
    	public static Date addDays(Date date, int days) {
    		date.setTime(1000 * (date.getTime()/1000 + 3600 * 24 * days));
    		return date;
    	}
     
    // Pour afficher une date quelconque au format de l'heure seule HH:mm
    	public static String timeFormat(Date date) {
    		return DateTimeFormat.getFormat("HH:mm").format(date);
    	}
     
    // Pour afficher une date quelconque au format americain, sans afficher l'heure
    	public static String dateFormat(Date date) {
    		return DateTimeFormat.getFormat("yyyy/MM/dd").format(date);
    	}

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Tu aurais pu créer ton propre sujet plutôt que de continuer sur une discussion qui n'a rien à voir


    Citation Envoyé par sergio86 Voir le message
    Comme le GregorianCalendar, Calendar et autres ne fonctionnent pas chez moi (pourquoi ??)
    Je me pose la même question : pourquoi ??
    Que veux-tu dire par "ne fonctionnent pas" ?

    C'est parce que tu n'as pas non plus réussi à utiliser le SimpleDateFormat de la librairie standard que tu t'es tourné vers une API tierce (j'imagine que ta classe DateTimeFormat provient de Joda Time ou de Google) ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Astartee Voir le message
    Tu aurais pu créer ton propre sujet plutôt que de continuer sur une discussion qui n'a rien à voir



    Je me pose la même question : pourquoi ??
    Que veux-tu dire par "ne fonctionnent pas" ?

    C'est parce que tu n'as pas non plus réussi à utiliser le SimpleDateFormat de la librairie standard que tu t'es tourné vers une API tierce (j'imagine que ta classe DateTimeFormat provient de Joda Time ou de Google) ?
    Effectivement, c'est en Google Web Toolkit, mea culpa.

    Dans Eclipse, j'ai une erreur qui m'indique que je n'ai pas hérité le module, etc.

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

Discussions similaires

  1. [Vxi3] Ajout nombre de mois a une date
    Par spopo69 dans le forum Deski
    Réponses: 3
    Dernier message: 02/09/2011, 07h55
  2. ajouter un nombre de mois à une date
    Par mèmaton dans le forum WinDev
    Réponses: 7
    Dernier message: 22/04/2009, 11h30
  3. Ajout d'un certains nombre de mois sur une date
    Par ksper45 dans le forum Linux
    Réponses: 4
    Dernier message: 06/11/2007, 16h59
  4. Réponses: 3
    Dernier message: 04/06/2007, 14h11
  5. ajouter un nombre de jour ouvrable à une date
    Par ecirb dans le forum InfoPath
    Réponses: 1
    Dernier message: 30/03/2007, 15h52

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