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]Problème de calcul de date [Infos]


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 19
    Points : 13
    Points
    13
    Par défaut [Calendar]Problème de calcul de date
    Bonjour,
    J'ai un problème au niveau d'un calcul de date en fait j'ai le code suivant :

    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
        String nouvelleDateProchainControle = "";
     
        Integer day = new Integer(jour);
        Integer month = new Integer(mois);
        Integer year = new Integer(annee);
     
        System.out.println("day : "+day);
        System.out.println("month : "+month);
        System.out.println("year : "+year);
        Calendar newDate = new GregorianCalendar(year.intValue(),
                                                 month.intValue(),
                                                 day.intValue());
        System.out.println("newDate : "+newDate);
        System.out.println("periodiciteMois : " + periodiciteMois);
        newDate.add(Calendar.MONTH,periodiciteMois);
     
        nouvelleDateProchainControle = Utilities.makeString(newDate.get(Calendar.DAY_OF_MONTH),2) + "." +
                                       Utilities.makeString(newDate.get(Calendar.MONTH),2) + "." +
                                       Utilities.makeString(newDate.get(Calendar.YEAR),4);
     
        System.out.println("nouvelleDateProchainControle : "+nouvelleDateProchainControle);
    Ca fonctionne très bien sauf quand je rentre une date au mois de décembre par exemple pour le 08/12/2004 si je lui ajoute 12 mois eh bien ma variable nouvelleDateProchainControle est égale à 08.00.2006 et je ne comprend pas. Est-ce-que quelqu'un a une idée ?
    [ Modéré par vedaer ]
    -> Ajout du tag dans le titre
    [ Merci de respecter les Règles du Forum ]

  2. #2
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    newDate.add(Calendar.DATE, -1);
    int Mois = newDate.get(Calendar.MONTH);Mois++;
    int Jour = newDate.get(Calendar.DAY_OF_MONTH);
    int Annee = newDate.get(Calendar.YEAR);
    ne marche pas pour avoir la date précédente??
    Grave urgent !!!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Je ne comprend pas ce que tu m'expliques !!

  4. #4
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    A l'heure actuelle, quand je veux faire des calculs sur des dates, je crée comme toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Calendar newDate = new GregorianCalendar(year.intValue(),
                                                 month.intValue(),
                                                 day.intValue());
    Ensuite, si je veux avoir la même date dans 15 jours, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newDate.add(Calendar.DATE, 15);
    Et ensuite, j'extrais le jour,mois,année de cette nouvelle date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int Mois = newDate.get(Calendar.MONTH);Mois++;
    int Jour = newDate.get(Calendar.DAY_OF_MONTH);
    int Annee = newDate.get(Calendar.YEAR);
    Je te propose ceci, ne sachant pas exactement et fonctionnellement ce que tu cherches à faire avec tes dates
    Grave urgent !!!

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    il faut savoir que dans un calendar les mois vont de 0 à 11 et non de 1 à 12, donc lorsque tu crée un Calendar avec avec {8,12,2004} en fait tu ne crée pas la date 8/12/2004 mais 8/01/2005

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    essaye en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Calendar newDate = new GregorianCalendar(year.intValue(), 
                                                 month.intValue()-1, 
                                                 day.intValue());
    Et quand tu veux récupérer la mois tu lui ajoute '+1'.
    Les mois sont mals dimensionnés, ils vont de 0 à 11 je pense...
    C'est au pied du mur... que l'on voit le mieux le mur!!

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Maintenant la manière la plus simple de manipuler les Calendar et un format de date spécifique reste la classe SimpleDateFormat, dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Definit un Objet permettant de manipuler  des dates au format jj.mm.yyyy 
    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd.MM.yyyy");
    java.util.Calendar newDate = java.util.Calendar.getInstance();
    //la méthode parse(...) transforme la String en java.sql.Date
    newDate.setTime(sdf.parse("08.12.2004"));
    int periodiciteMois = 12;
    newDate.add(java.util.Calendar.MONTH,periodiciteMois);
    //la méthode format(...) transforme la java.sql.Date en String au format jj.mm.yyyy
    String nouvelleDateProchainControle = sdf.format(newDate.getTime());
    System.out.println("nouvelleDateProchainControle : "+nouvelleDateProchainControle);
    Voilà comme ça c'est plus simple et surtout tu as moins de risque d'erreurs, notamment au niveau de la manipulation des mois!!!

    c.f. javadoc SimpleDateFormat
    Fait également attention aux ParseException qui peuvent être levées.
    Et enfin je te conseille fortement de lire en entier la javadoc sur les Calendar
    pour comprendre les subtilités du recalcul des différents champs composant un Calendar lors d'appels aux méthodes add ou set, qui peut occasionner des surprises lors d'appel suivant a get... (c pas clair hein? c mieux expliqué dans la javadoc :p)

Discussions similaires

  1. problème de calculs sur dates
    Par Sefrou dans le forum IHM
    Réponses: 3
    Dernier message: 12/02/2011, 00h27
  2. Problème sur calcul entre 2 dates
    Par kcizth dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 08/10/2008, 19h17
  3. [Dates] Problème avec un calcul de date
    Par cyberdevelopment dans le forum Langage
    Réponses: 6
    Dernier message: 13/04/2007, 13h59
  4. Un p'tit problème de calcul de dates sous Acces
    Par DB_noub dans le forum Access
    Réponses: 3
    Dernier message: 16/03/2007, 12h12
  5. [Calendar] Problème de comparaison de 2 dates
    Par Core8 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 26/12/2006, 18h00

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