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.add et années bissextiles


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Par défaut Calendar.add et années bissextiles
    Bonjour à tous,

    Je suis confronté à un problème sur la gestion des années bissextiles par Calendar. La problématique est la suivante: soient 2 dates, date1 et date2. Je dois déterminer que date2 est bien 5 ans après date1. Par exemple: si date1 vaut 31/03/2012, date2 doit valoir 30/03/2017. Pour cela, 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
    Date date1 = monObjetMetier.getDate1();
    Date date2 = monObjetMetier.getDate2();
    Calendar compare = Calendar.getInstance();
    compare.setTime(date1);
    compare.add(Calendar.YEAR, 5);
    compare.add(Calendar.DAY_OF_YEAR, -1);
     
    if (!DateUtils.isSameDay(compare.getTime(), date2)) {
            // ...
    }
    Le problème se pose quand date1 vaut 29/02/2012. Selon le code ci-dessus, date1 + 5 ans = 27/02/2017 alors qu'on devrait tomber sur le 28 février

    Bien sûr, je pourrais ne pas soustraire 1 jour si date1 tombe un 29 février mais je préfèrerais avoir une solution plus propre Si l'un(e) d'entre vous à une quelconque idée, je suis preneur !

    D'avance merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Pourquoi tu soustraits un jour ?


    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Par défaut
    Parce qu'on veut que par exemple 31/03/2012 + 5 ans donne 30/03/2017.

    Bon, le problème est résolu en enlevant d'abord un jour puis en ajoutant les 5 ans. Le problème était que le 29/02/2017 n'existe pas... Et qu'il se tranformait en 28/02/2017 avant qu'on enlève un jour.

    Du coup, ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Date date1 = monObjetMetier.getDate1();
    Date date2 = monObjetMetier.getDate2();
    Calendar compare = Calendar.getInstance();
    compare.setTime(date1);
    compare.add(Calendar.DAY_OF_YEAR, -1);
    compare.add(Calendar.YEAR, 5);
     
    if (!DateUtils.isSameDay(compare.getTime(), date2)) {
            // ...
    }
    On m'a parlé de la librairie Joda Time qui serait plus adaptée aux opérations sur les date que l'API de base. Je vais me pencher dessus !

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par papyreno Voir le message
    On m'a parlé de la librairie Joda Time qui serait plus adaptée aux opérations sur les date que l'API de base. Je vais me pencher dessus !
    C'est vrai, mais dans le cas présent tu n'aurais pas été plus avancé.
    Le 29 Février 2017, ça n'existe pas, quelle que soit l'API de représentation de date qu'on utilise.
    (En fait, il paraît que ça ne dépend même pas du langage de programmation qu'on utilise, et même pas de si on utilise un ordinateur ou non.)

    La seule solution, c'est de lire la documentation sur la manière dont l'API de date gère le problème. J'admets que celle de Joda-time répond plus vite à la question.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. DateDiff et années bissextiles
    Par Qosmio dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 02/06/2010, 14h54
  2. [Dates] Liste déroulante date et années bissextiles
    Par Jiraiya42 dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2007, 00h04
  3. test année bissextile
    Par franfr57 dans le forum ASP
    Réponses: 1
    Dernier message: 07/05/2007, 13h28
  4. Année bissextile [9i]
    Par kalyparker dans le forum Oracle
    Réponses: 8
    Dernier message: 09/02/2007, 22h48
  5. [VBA-E] Graphique superposé avec année bissextile
    Par popo68 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/01/2007, 14h22

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