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 :

Obtenir la semaine et l'année d'une date


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut Obtenir la semaine et l'année d'une date
    Bonjour à tous,

    Je souhaiterai obtenir le numéro de la semaine et l'année par rapport à une date donnée en paramètre. Voici le code que j'ai utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       public static void getNumWeekYearOfDate(Date dateInc) {
            Calendar cal = Calendar.getInstance(Locale.FRANCE);
            cal.setTime(dateInc);
     
            System.out.println("n° semaine : " + cal.get(Calendar.WEEK_OF_YEAR));
            System.out.println("Année  : " + cal.get(Calendar.YEAR));
       }
    Ce code marche très bien à quelques exception près. En effet, il peut arriver que début janvier l'on soit sur une semaine de l'année précédente ou quand fin décembre l'on soit sur une semaine de l'année suivante.
    Par exemple le 1er janvier 2012 équivaut à la semaine 52 de l'année 2011.

    Quelqu'un aurait-il une idée pour que ma fonction renvoies le numéro de la semaine et la bonne année de ma date passée en paramètre?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Salut,
    Je crois que c'est normal, ça correspond au format ISO :
    http://fr.wikipedia.org/wiki/Num%C3%...O_des_semaines.

  3. #3
    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,


    C'est normal : le 1er janvier 2012 est un dimanche. C'est donc le dernier jour de la dernière semaine de 2011...

    Tu voudrais avoir quoi dans ce cas ???

    a++

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    En fait je voudrais qu'il me renvoi par rapport au 1er janvier 2012 la semaine 52 de l'année 2011.

    J'ai fais quelques recherche de mon coté, effectivement si le 1er janvier de l'année N est un vendredi, samedi ou dimanche, cette semaine appartiendra a la semaine de l'année N-1 car elle n'aura que 3 jours sur 7 sur l'année N.

    De même pour le 31 décembre de l'année N, si c'est un Lundi, Mardi ou Mercredi, la semaine appartiendra à la semaine de l'année [N+1] car elle n'aura que 3 jours sur 7 sur l'année N.

    De la je devrais pouvoir créer un petit algorithme pour récupérer l'année correspondant à la semaine, mais peut être existe t-il une fonction dans Calendar pour récupérer la bonne année correspondant à la semaine renvoyée.

  5. #5
    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 RomG7 Voir le message
    De la je devrais pouvoir créer un petit algorithme pour récupérer l'année correspondant à la semaine, mais peut être existe t-il une fonction dans Calendar pour récupérer la bonne année correspondant à la semaine renvoyée.
    Pas que je sache, j'ai déjà cherché en ce sens.

    Ce que je fais :

    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
     
    int weekNum = cal.get(Calendar.WEEK_OF_YEAR);
    // Régler le calendrier en début de semaine
    cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
    // Lire l'année en début de semaine
    int weekStartYear = cal.get(Calendar.YEAR);
    // Régler en fin de semaine
    cal.add(Calendar.DAY_OF_YEAR, 6);
    // Lire l'année en fin de semaine
    int weekEndYear = cal.get(Calendar.YEAR);
     
    // Comparer weekStartYear et weekEndYear =>
    // Si c'est les mêmes, on a pas changé d'année.
    // Sinon, et que weekNum est 1, notre date est dans la nouvelle année
    // Sinon, notre date est dans l'ancienne année.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Je m'étais amusé à faire un petit algorithme. Je suis parti du principe que si la date est supérieure au 3 janvier et inférieure au 29 décembre, on est sur que l'on est sur une semaine de l'année N.

    Merci pour ta réponse. Ta méthode à l'air parfaite, je vais la tester.

  7. #7
    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 RomG7 Voir le message
    Je m'étais amusé à faire un petit algorithme qui à l'air de fonctionner. Je suis parti du principe que si la date est supérieure au 3 janvier et inférieure au 29 décembre, on est sur que l'on est sur une semaine de l'année N.
    'Tention c'est très français, comme considération.

    Ce qui est assez international avec les calendriers grégoriens et juliens, c'est :
    - Le pays choisit un jour pour être le premier de la semaine. (Lundi chez nous, dimanche aux US, autre chose...)
    - Le pays choisit le nombre minimum de jours qui doivent faire partie de l'année pour que la semaine qui les contient soit la première semaine de l'année. (Chez nous, c'est la semaine du premier jeudi de l'année, et vu qu'on commence au lundi ça veut dire 4 jours minimum.)

    La classe Calendar accepte qu'on règle ces deux choses, et fait les calculs de jour, de semaine et d'année en conséquence.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Citation Envoyé par RomG7 Voir le message
    J'ai fais quelques recherche de mon coté, effectivement si le 1er janvier de l'année N est un vendredi, samedi ou dimanche, cette semaine appartiendra a la semaine de l'année N-1 car elle n'aura que 3 jours sur 7 sur l'année N.

    De même pour le 31 décembre de l'année N, si c'est un Lundi, Mardi ou Mercredi, la semaine appartiendra à la semaine de l'année [N+1] car elle n'aura que 3 jours sur 7 sur l'année N.
    Normalement, cette méthode est celle appliquée à nos calendrier, enfin c'est ce que j'avais pu comprendre?

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Dans nos calendrier, il faut au moins 4 jours dans la semaine pour qu'elle fasse partie de l'année courante. C'est le comportement par défaut du GregorianCalendar avec la Locale française.

    J'ai cru comprendre à vos message que vous vouliez que le Calendrier aie d'office le 1er janvier dans la première semaine Et ça c'est pas "la norme française"

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Non justement, je voudrais vraiment que cela respecte notre norme. J'ai eu autant de mal à m'expliquer qu'à digérer tous ce que j'avais pu lire à ce sujet

    Je vais essayer de mettre en place cette satané fonction avec tous ce que vous avez pu m'indiquer comme méthode de l'objet Calendar mais c'est pas gagné, pourtant c'est pas faute d'essayer.

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

Discussions similaires

  1. Obtenir que le mois ou l'année d'une date.
    Par nomade333 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/09/2013, 10h11
  2. [Debutant] récupérer l'année d'une date
    Par petitelulu dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 27/10/2004, 15h28
  3. Récupérer le mois et l'année d'une date
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 09h17
  4. requête sur l'année d'une date
    Par jo77 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/07/2003, 09h28
  5. Récupérer l'année d'une date
    Par delphim dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/01/2003, 16h33

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