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

Langage Delphi Discussion :

Calcul des dates et des jours ouvrés


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 129
    Points : 95
    Points
    95
    Par défaut Calcul des dates et des jours ouvrés
    Existe-t-il une bibliotheque de fonction en Delphi/pascal libre de preference qui permet de faire des calculs sur les dates (jours ouvrés avec prise en compte des jours fériés).

    Merci !

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Voiçi déjà de quoi déterminer la date des jours fériés mobiles : la fonction sPaques(Annee : integer) renvoie une chaine au format jj.mm.aaaa qui donne la date de Pâques et en même temps elle actualise la valeur des variables globales JourPaques, MoisPaques, JourAscension, MoisAscension, JourPentecote, MoisPentecote : Integer; pour les jours fériés fixes suffit de prendre un calendier.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    type     s1Date = string[10];
     
    var      JourPaques,MoisPaques,JourAscension,MoisAscension,
               JourPentecote,MoisPentecote : integer;
     
    function sPaques(Annee : integer) : s1Date; { jj.mm.aaaa / méthode de Gauss }
    var      v,w,x,y,z,m,n,JP,MP,r1,r2 : integer;
                        cA,cJ,cM : string[4];
    var      njMois : array[1..12] of byte;
    begin    njMois[1]:=31;
             if Annee mod 4 =0 then njMois[2]:=29 else njMois[2]:=28;
             njMois[3]:=31;
             njMois[4]:=30;
             njMois[5]:=31;
             njMois[6]:=30;
             njMois[7]:=31;
             njMois[8]:=31;
             njMois[9]:=30;
             njMois[10]:=31;
             njMois[11]:=30;
             njMois[12]:=31;
             { ----------- }
             JP:=0; MP:=0;
             if (Annee>1582) and (Annee<2200) then { année grégorienne }
             begin case Annee of
                        1583..1699 : begin m:=22; n:=2; end;
                        1700..1799 : begin m:=23; n:=3; end;
                        1800..1899 : begin m:=23; n:=4; end;
                        1900..2099 : begin m:=24; n:=5; end;
                        2100..2199 : begin m:=24; n:=6; end;
                   end;
                   v:=Annee mod 4;
                   w:=Annee mod 7;
                   x:=Annee mod 19;
                   y:=(19*x + m) mod 30;
                   z:=(2*v + 4*w + 6*y + n) mod 7;
                   if (y+z>9)
                   then begin JP:=y+z-9;
                              MP:=4;
                              if JP=26 then JP:=19;
                              if (JP=25) and (y=28) then JP:=18; end
                   else begin JP:=22+y+z; MP:=3; end;
                   JourPaques:=JP; MoisPaques:=MP;
                   cJ:=intToStr(JP); cM:=intToStr(MP); cA:=intToStr(Annee);
                   sPaques:=cJ+'.'+cM+'.'+cA;
             end else sPaques:='1583-2199';
             JourPaques:=JP; MoisPaques:=MP;
             if JP>0 then
             begin { Jeudi de l'Ascension = Pâques + 39 }
                   r1:=njMois[MoisPaques]-JourPaques;
                   r2:=39-r1;
                   if r2<=njMois[MoisPaques+1]
                   then MoisAscension:=MoisPaques+1
                   else begin r2:=r2-njMois[MoisPaques+1]; MoisAscension:=MoisPaques+2 end;
                   JourAscension:=r2;
                   { Pentecôte = Ascension + 10 }
                   if JourAscension+10<=njMois[MoisAscension]
                   then begin JourPentecote:=JourAscension+10;
                              MoisPentecote:=MoisAscension; end
                   else begin JourPentecote:=JourAscension+10-njMois[MoisAscension];
                              MoisPentecote:=MoisAscension+1; end;
             end;
    end;
    ... et à partir du moment où t'as la date du dimanche de Pâques d'une année t'as les dates de tous les dimanches de l'année.
    ... et le lundi de Pâques qui est également mobile c'est bien entendu le lendemain du dimanche de Pâques...

    A+

    EDIT : Et pour les calculs sur dates : voir l'aide Delphi.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Sinon tu as également ceci dans la FAQ, pour les jours fériés mobiles.

    Quant aux jours ouvrés, comme le précise Gilbert, tu disposes des fonctions de DateUtils, notamment DayOfWeek, DayOfTheWeek, ...

    @+ Claudius

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/04/2011, 13h30
  2. calculer difference date heure en jours ouvres
    Par wahabts7 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/04/2010, 23h48
  3. Réponses: 3
    Dernier message: 27/01/2006, 12h36

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