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

Algorithmes et structures de données Discussion :

Calcul des numéros de semaine d'un calendrier


Sujet :

Algorithmes et structures de données

  1. #1
    Invité
    Invité(e)
    Par défaut Calcul des numéros de semaine d'un calendrier
    Je cherche les algos des fonctions suivantes :

    - Retour du nombre de semaines dans une année en fonction de l'année (52 ou 53 ?)
    - Retour du numéro de semaine en fonctions d'une date.

    (On peut facilement faire la première fonction à partir de la seconde)

    Et si possible en respectant la norme ISO 8601 (norme de gestion des dates)


  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    tu peut m en dire plus sur la norme iso 8601 car je c pas a quoi elle correspond

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 66
    Points : 129
    Points
    129
    Par défaut
    Voici deux liens trouvés à partir du site delphi32.com :

    http://www.delphi32.com/info_facts/faq/faq_376.asp
    http://www.delphitips.com/Detailed/85.shtml

    Le premier effectue une opération assez approximative, le second prend en compte le nb de jours de chaque mois et les années bissextiles. Seule inconnue : le 1er jour de l'année ...

    voici le code du second :

    function IsLeapYear( nYear: Integer ): Boolean;
    begin
    Result := (nYear mod 4 = 0) and ((nYear mod 100 <> 0) or (nYear mod 400 = 0));
    end;

    function MonthDays( nMonth, nYear: Integer ): Integer;
    const
    DaysPerMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    begin
    Result := DaysPerMonth[nMonth];
    if (nMonth = 2) and IsLeapYear(nYear) then Inc(Result);
    end;

    function WeekOfYear( dDate: TDateTime ): Integer;
    var
    X, nDayCount: Integer;
    nMonth, nDay, nYear: Word;
    begin
    nDayCount := 0;
    deCodeDate( dDate, nYear, nMonth, nDay );
    For X := 1 to ( nMonth - 1 ) do
    nDayCount := nDayCount + MonthDays( X, nYear );
    nDayCount := nDayCount + nDay;
    Result := ( ( nDayCount div 7 ) + 1 );
    end;


    A+
    Consultez :
    - La F.A.Q Delphi + Les Cours Delphi
    - La sélection des Freewares Delphi

  4. #4
    psl
    psl est déconnecté
    Membre actif
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Points : 242
    Points
    242
    Par défaut
    Salut,
    Il existe effectivement des algos traitant ce sujet, mais je ne les ai pas sous la main. Je vais faire une recherche dans ma documentation pour les mettre sur le forum.
    Par contre les langages actuels disposent de fonction effectuant ces calculs.
    Exemple sous Delphi 6 :
    Pour connaître le nombre de semaines dans une années, on dispose des fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    uses
      DateUtils;
    var
      MaDate : TDateTime;
    begin
      MaDate := Now; {date et heure système}
      // Affiche le nb de semaine
      ShowMessage(IntToStr(WeeksInYear(MaDate)));
      // ou bien - 2004 à 53 semaines
      ShowMessage(IntToStr(WeeksInAYear(2004)));
    end;
    Pour le numéro de la semaine, on a également 2 fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    uses
      DateUtils;
    var
      MaDate : TDateTime;
    begin
      MaDate := Now; {date et heure système}
      //Numéro de la semaine
      ShowMessage(IntToStr(WeekOfTheYear(MaDate)));
      //Numéro de la semaine
      ShowMessage(IntToStr(WeekOf(MaDate)));
    end;
    Quelques éléments de ISO 8601
    La première semaine de l'année est celle qui contient le premier jeudi de l'année (dont une semaine d'au moins 4 jours).
    Le premier jour de la semaine est le lundi.
    @+
    Ubuntu 18.04 LTS

  5. #5
    psl
    psl est déconnecté
    Membre actif
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Points : 242
    Points
    242
    Par défaut
    Salut,
    Juste une petite idée (indépendante du langage de programmation).
    Si le premier jour de l'année est un lundi, un mardi, un mercredi ou un jeudi alors on est en semaine 1.
    Si le premier jour de l'année est un vendredi, un samedi ou un dimanche alors la semaine 1 commence le lundi qui suit.
    Le jour de la semaine au 1er janvier de l'année AAAA peut être calculé de la manière suivante :
    On calcule le jour Julien au 1er janvier AAAA à 0 heure + 1,5 et on divise le résultat par 7.
    Le reste de la division donne le jour de la semaine (Numero_jour).
    Si Numero_jour = 0 alors Numero_jour = 7
    Dans ces conditions on obtient 0<= Numero_Jour <=7 (0 = lundi ... 7 = dimanche).
    Si Numero_jour (pour le 1er janvier) compris entre 1 et 4 alors on est en semaine 1
    Si Numero_jour (pour le 1er janvier) compris entre 5 et 7 alors on est dans la dernière semaine de AAAA-1 et la semaine 1 commence le lundi, (9-Numero_jour) janvier AAAA.

    Si tout cela ne te parraît pas clair ou si tu as des soucis avec le jour Julien, je reste à ta disposition.
    @+
    Ubuntu 18.04 LTS

Discussions similaires

  1. Calculer des numéro de position d'un produit dans un rayon
    Par romain.asenjo dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/04/2013, 10h09
  2. Faire des calculs sur le numéro de semaine ISO
    Par Fiona08 dans le forum SQL
    Réponses: 13
    Dernier message: 20/10/2008, 11h28
  3. [EXP]Calcul du numéro de semaine
    Par aouregan dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/03/2007, 15h55
  4. Calculer le numéro de semaine d'une date
    Par chandlerbing77 dans le forum Access
    Réponses: 2
    Dernier message: 09/06/2006, 12h26
  5. [excel]calcul du numéro de semaine
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/10/2005, 11h57

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