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 numéro de semaine de l'année


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut [Calendar] Problème de numéro de semaine de l'année
    Bonjour,

    J'utilise la classe Calendar pour obtenir les numéros de semaine de l'année.
    Exemple : aujourd'hui, nous sommes dans la semaine 49.
    Le 29/12/2004, nous devrons être dans la semaine 53.
    Or, lorsque j'utilise Calendar....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        TimeZone tz = TimeZone.getTimeZone("Europe/Paris");
        Calendar calendar = new GregorianCalendar(tz, Locale.FRANCE);
        Date trialTime = new Date(System.currentTimeMillis());
        calendar.setTime(trialTime);
     
        calendar.add(Calendar.DATE, 30);
     
        System.out.println(calendar.getTime());
        System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));
        System.out.println(calendar.get(Calendar.YEAR));
    ... voici ce que j'obtiens :
    Wed Dec 29 10:26:19 CET 2004
    1
    2004

    Bizarre, bizarre !!

    De plus, le décalage continue sur l'année 2005... semaine 2 au lieu d'être en une...

    Avez vous déjà rencontré ce problème ?

    Merci !!

  2. #2
    Membre du Club Avatar de JWillow
    Inscrit en
    Juin 2003
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    En faisant : calendar.add(calendar.add(Calendar.DATE, 30);

    tu as ajouté 30 jour à la date actuel c normal que tu obtiennes alors un écart

  3. #3
    Membre du Club Avatar de JWillow
    Inscrit en
    Juin 2003
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    Autant pour moi je pense que j'ai mal lu la question !

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Je fais calendar.add(calendar.add(Calendar.DATE, 30); volontairement, pour me placer sur le 29/12 et pouvoir calculer le numéro de semaine dans l'année.

    Normalement, si je regarde mon calendrier, le 29/12 est dans la semaine 53, alors que Calendar me renvoie en semaine 1 de l'année 2004 !!

  5. #5
    Membre du Club Avatar de JWillow
    Inscrit en
    Juin 2003
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 57
    Points : 67
    Points
    67
    Par défaut
    Essaye d'ajouter les jours avec la constante DAY_OF_YEAR au lieu de DATE

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Finallement je viens de trouver la solution, je ne suis pas la seule à avoir eu le problème...

    Selon la norme ISO 8601 sur les formats de date, la première semaine de l'année est définie comme la semaine contenant le premier jeudi de l'année.

    Exemple :
    L'année 2004 contient 53 semaines, car dans les 4 premiers jours de l'année 2005, il n'y a pas de jeudi.

    Pour résoudre le problème précedemment exposé, il faut donc appliquer cette règle à notre Calendar :
    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
     
    // Date actuelle
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date(System.currentTimeMillis()));
     
    //  -----Voici l'astuce -----
    calendar.setFirstDayOfWeek(Calendar.MONDAY);
    calendar.setMinimalDaysInFirstWeek(4);
     
    // On ajoute 30 jours pour tomber dans la semaine 53
    calendar.add(Calendar.DAY_OF_YEAR, 30);
     
    // Et cette fois, le résultat est conforme à ce que j'attend
    System.out.println(calendar.getTime());
    System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));
    System.out.println(calendar.get(Calendar.YEAR));
    Je vais donc ajouter ces 2 lignes à chaque fois que j'utilise Calendar !
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date(System.currentTimeMillis()));

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/01/2013, 09h05
  2. Réponses: 3
    Dernier message: 09/03/2012, 08h34
  3. Réponses: 7
    Dernier message: 08/11/2011, 13h30
  4. Numéro de semaine erroné avec Calendar
    Par peofofo dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 08/08/2011, 08h25
  5. [Calendar] Problème de décalage du numéro de semaine
    Par Amara dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 10/07/2006, 16h08

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