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 :

Numéro de semaine erroné avec Calendar


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Numéro de semaine erroné avec Calendar
    Bonjour à tous,

    J'ai un problème pour obtenir le numéro de la semaine avec: Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GregorianCalendar gc = new GregorianCalendar();
    		 gc.set(2011, 01, 01, 01, 00, 00);
    		 semaine=gc.get(Calendar.WEEK_OF_YEAR);
    		 System.out.println("Semaine:"+ semaine);
    Il m'affiche: Semaine:5
    Alors que c'est la première semaine de l'année!
    Bref, il y a un décalage de 5 semaines.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.out.println("LOCALE : " + Locale.getDefault());
    		 String version = System.getProperty("java.vm.version");
    		 System.out.println("JVM : " + version);
    Voici la version:
    LOCALE : fr_FR
    JVM : 17.1-b03

    Avez vous une idée y remédier?
    en évitant de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gc.add(GregorianCalendar.WEEK_OF_YEAR, -5);
    Merci

  2. #2
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Salut,

    Sur la doc :
    ...The first month of the year in the Gregorian and Julian calendars is JANUARY which is 0...
    Comme tu vois, Janvier c'est 0 pas 1 .
    D'un autre côté donc, ça aurait été mieux d'utiliser les constantes déjà présentes "Calendar.JANUARY".

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci pour ta réponse,

    Donc du coups, je suis obligé de mettre un décalage:
    Ceci est il juste?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Integer getSemaine()
    	 {	 		 
    		 GregorianCalendar gc = new GregorianCalendar();
    		 gc.set(getAnnee(), getMois(), getJour());
    		 gc.add(Calendar.MONTH, -1);
    		 semaine=gc.get(Calendar.WEEK_OF_YEAR);
    		 return semaine;
    	 }
    Merci

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Du coups, j'ai un bug sur la date du 30/01/2011.
    Il m'indique que c'est la semaine 5, alors que c'est la semaine 4.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Date avant: 23/01/2011 | Semaine: 3
    Date avant: 30/01/2011 | Semaine: 5 (Semaine 4 n'apparait pas)
    Date avant: 06/02/2011 | Semaine: 5
    Date avant: 13/02/2011 | Semaine: 6
    Date avant: 20/02/2011 | Semaine: 7
    Bizarre !
    Edit> j'ai fait un test de 2000 a 2011.

    Le premier bug commence en 2004 : Semaine 5 (n'apparait pas)
    2005: Semaine 4 (n'apparait pas)
    2009: Semaine 5 (n'apparait pas)
    2010: Semaine 4 (n'apparait pas)
    2011: Semaine 4 (n'apparait pas)


    Je comprends plus rien!

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 566
    Points : 21 632
    Points
    21 632
    Par défaut
    Citation Envoyé par peofofo Voir le message
    Ceci est il juste?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Integer getSemaine()
    	 {	 		 
    		 GregorianCalendar gc = new GregorianCalendar();
    		 gc.set(getAnnee(), getMois(), getJour());
    		 gc.add(Calendar.MONTH, -1);
    		 semaine=gc.get(Calendar.WEEK_OF_YEAR);
    		 return semaine;
    	 }
    Cela n'est pas juste, non. En faisant ainsi, tu mets d'abord le calendrier un mois après ce que tu veux vraiment, puis tu vas un mois plus tôt.
    "C'est la même chose" => Nope. Supposons que tu veuilles te mettre au 30 Janvier. Tu vas donc commencer par aller au... 30 Février ??! Ce qui amène, selon l'année, au 2nd ou 1er Mars, puis on va un mois plus tôt et on arrive au 2nd ou 1er Février. Alors que c'est le 30 Janvier qu'on voulait.

    Comment corriger :
    - Déjà, demande-toi si tu peux pas faire en sorte que getMois() renvoie une des constantes comme Calendar.JANUARY, Calendar.FEBRUARY, etc. Comme ça il n'y a pas de décalage à gérer.
    Sinon;
    - il suffit de faire un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gc.set(getAnnee(), getMois() - 1, getJour());

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci thelvin,

    Tu m'as donné la solution, j'ai reconstruit ma classe et j'ai suivi tes conseils.

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

Discussions similaires

  1. Résultat du Calcul numéro de semaine erroné
    Par jerem7w dans le forum SQL
    Réponses: 2
    Dernier message: 07/09/2010, 13h38
  2. Numéro de semaine erroné
    Par ben_harper dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/02/2009, 17h01
  3. Récupérer numéro de semaine courrante avec MySQL
    Par bobic dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2006, 20h11
  4. [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
  5. [Calendar] Problème de numéro de semaine de l'année
    Par gaia_dev dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 29/11/2004, 11h44

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