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 :

Afficher numéro de semaine d'un jour via Calendar


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 67
    Points
    67
    Par défaut Afficher numéro de semaine d'un jour via Calendar
    Bonjour...

    J'ai besoin de récupérer le numéro de la semaine d'un jour donné. Pour cela, il y a deux propriété pour afficher ce numéro: WEEK_OF_MONTH et DAY_OF_WEEK_IN_MONTH. Mais, je ne sais pas exactement qu'elle est la différence entre les deux, sachant que pour des jours de mois, l'un des deux affiche un numéro différent de l'autre. comme le 13/04/2012.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Calendar cal= Calendar.getInstance();
    cal.setMinimalDaysInFirstWeek(1);
    Date date = new Date();
    date.setMonth(4);
    date.setDate(13);
    date.setYear(2012);
    cal.setTime(date);
    System.out.println("a : " + cal.get(Calendar.WEEK_OF_MONTH));
    System.out.println("b : " + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
    Résultat:
    Normalement le bon résultat doit être '3'

    Et si je passe un autre jour par exemple 02/04/2012, il doit m'afficher que la semaine de ce jour est Numéro '2', mais le résultat est comme suite:
    Et pour le jour 31/12/2012, normalement le numéro de la semaine doit être '6', mais le résultat est:
    Merci de m'expliquer cette incohérence de résultat

    Sisiniya

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 619
    Points
    21 619
    Par défaut
    Citation Envoyé par sisiniya Voir le message
    J'ai besoin de récupérer le numéro de la semaine d'un jour donné. Pour cela, il y a deux propriété pour afficher ce numéro: WEEK_OF_MONTH et DAY_OF_WEEK_IN_MONTH.
    Non, uniquement WEEK_OF_MONTH. Comme son nom l'indique.
    DAY_OF_WEEK_IN_MONTH n'a absolument pas ce but, et son nom n'indique rien de ce genre. Il n'y a aucune raison de penser qu'il et lié.

    Citation Envoyé par sisiniya Voir le message
    Mais, je ne sais pas exactement qu'elle est la différence entre les deux, sachant que pour des jours de mois, l'un des deux affiche un numéro différent de l'autre.
    WEEK_OF_MONTH fait ce que tu demandes.
    DAY_OF_WEEK_IN_MONTH fait ce que son nom indique. Supposons que le jour que tu étudies soit un jeudi. Ce champ te dit si c'est le premier jeudi du mois, ou le second, ou le troisième, ou le quatrième, ou le cinquième.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date date = new Date();
    date.setMonth(4);
    date.setDate(13);
    date.setYear(2012);
    Mauvais plan. Les méthodes setMonth(), setDate() et setYear() sont dépréciées, et ce n'est pas pour rien.
    Mais setMonth() est encore pire. Il ne faut pas y mettre de valeur numérique, il aurait fallu faire date.setMonth(Calendar.APRIL); pour régler sur Avril. Mais Calendar.APRIL vaut 3, pas 4. La valeur 4 c'est Calendar.MAY. Tu l'avais réglé en Mai. C'est pour ça que tu avais des incohérences.
    C'est ce que je reproche le plus à la gestion des dates en Java. Mais passons, de toute façon setDate() et setYear() sont dépréciées aussi. Il ne faut pas s'en servir. (La raison étant qu'il vaut mieux utiliser un calendrier pour calculer des dates.)

    La méthode généralement préférée est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String sDate = "2012/04/13";
    DateFormat format = new SimpleDateFormat("yyyy/MM/dd");
    Date date = format.parseDate(sDate);
    Écriture très naturelle et peu génératrice de bugs.
    On pourra aussi vouloir utiliser Joda-Time, qui n'a pas ce problème-là.

  3. #3
    Membre du Club Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 67
    Points
    67
    Par défaut
    Tout à fait raison, Merci pour toutes ces explications...

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 11/10/2011, 14h04
  2. Trouver la date via numéro de semaine
    Par Themacleod1980 dans le forum C#
    Réponses: 20
    Dernier message: 19/05/2011, 17h13
  3. Réponses: 1
    Dernier message: 26/10/2009, 15h51
  4. Réponses: 5
    Dernier message: 22/08/2009, 02h06
  5. [Toutes versions] dates : numéros des jours en fonction du numéro de semaine ?
    Par krakov dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/04/2009, 14h13

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