Section courante

A propos

Section administrative du site

Autrefois utilisé principalement pour suivre les cycles de la Lune et déterminer les différentes phases lunaires, le calendrier est devenu au fil des siècles l'un des outils les plus importants de l'organisation humaine. Des premières civilisations agricoles jusqu'aux grandes puissances de l'Antiquité, la mesure du temps a toujours constitué une préoccupation essentielle pour prévoir les saisons, organiser les récoltes, planifier les fêtes religieuses et administrer les affaires publiques. Le calendrier a ainsi évolué progressivement en fonction des connaissances astronomiques disponibles et des besoins des sociétés qui l'utilisaient.

L'histoire du calendrier est également étroitement liée à celle de personnages célèbres ayant marqué l'Empire romain. Le calendrier julien, instauré par Jules César au Ier siècle avant notre ère, représentait déjà une amélioration considérable par rapport aux systèmes antérieurs. Plus tard, sous le règne de Auguste, certaines modifications furent apportées afin d'assurer une meilleure répartition des jours dans l'année. Pendant plus de quinze siècles, ce calendrier demeura la référence dans une grande partie du monde occidental.

Cependant, malgré ses qualités, le calendrier julien comportait une légère erreur dans l'évaluation de la durée de l'année solaire. Cette différence, presque imperceptible à court terme, s'accumulait progressivement au fil des siècles et provoquait un décalage entre les dates civiles et les événements astronomiques. Afin de corriger ce problème, une réforme fut mise en place en 1582 sous l'autorité du pape Grégoire XIII. Cette réforme donna naissance au calendrier grégorien, celui que nous utilisons encore aujourd'hui dans la majorité des pays du monde.

Le calendrier grégorien repose sur des règles précises concernant les années bissextiles et permet de déterminer avec exactitude le jour de la semaine correspondant à une date donnée. Grâce à quelques calculs mathématiques relativement simples, il devient possible de générer automatiquement l'affichage complet d'un mois ou même d'une année entière. Cette capacité est particulièrement utile dans les logiciels de gestion du temps, les agendas électroniques, les applications de planification ou encore les systèmes de réservation.

À l'aide du code source Delphi présenté ci-dessous, vous pourrez générer un calendrier grégorien complet correspondant à l'année souhaitée. Le programme calcule automatiquement le jour de la semaine associé à chaque date, tient compte des années bissextiles et affiche les différents mois dans un format semblable à celui des calendriers imprimés traditionnels. Vous trouverez ainsi une solution pratique permettant de comprendre le fonctionnement interne des calendriers modernes tout en découvrant l'application concrète de plusieurs algorithmes de calcul de dates :

  1. Program Calendar;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. Uses SysUtils;
  6.      
  7. Function DateToDayOfWeek(Y,M,D:Integer):Integer;
  8. Var
  9.  T0,T1,T2,Total:Integer;
  10. Begin
  11.  If(M > 12) Or (0 = M) Or (0 = D)Then Begin
  12.   DateToDayOfWeek:=0;Exit;
  13.  End;
  14.  If Y < 0 Then Inc(Y);
  15.  T0 := Trunc(0.6 + 1 / M);
  16.  T1 := M + 12 * T0;
  17.  T2 := Y - T0;
  18.  Total := Trunc(13 * (T1 + 1) / 5) + (5 * T2 div 4) - (T2 div 100) + (T2 div 400) + D - 1;
  19.  DateToDayOfWeek := Total - 7 * (Total div 7);
  20. End;
  21.      
  22. Procedure PutCalendar(Yr,Mh,Dy:Integer);
  23. Const
  24.  Days:Array[1..12] of Integer=(31,28,31,30,31,30,31,31,30,31,30,31);
  25. Var
  26.  I,D:Integer;
  27. Begin
  28.  If IsLeapYear(Yr)Then Days[2] := 29;
  29.  D := DateToDayOfWeek(Yr, Mh, 1);
  30.  WriteLn('Diman Lundi Mardi Mercr Jeudi Vendr Samed');
  31.  Write(' ':6 * D);
  32.  For I := 1 To Days[Mh]do Begin
  33.   If I < 10 Then Write(' ');
  34.   Write(I,' ':4);
  35.   If(0 = (D + I) Mod 7)Then WriteLn;
  36.  End;
  37.  WriteLn;
  38.  WriteLn;
  39. End;
  40.      
  41. Function MonthName(Mh:Integer):String;Begin
  42.  Case Mh of
  43.   1:MonthName:='Janvier';
  44.   2:MonthName:='Février';
  45.   3:MonthName:='Mars';
  46.   4:MonthName:='Avril';
  47.   5:MonthName:='Mai';
  48.   6:MonthName:='Juin';
  49.   7:MonthName:='Juillet';
  50.   8:MonthName:='Août';
  51.   9:MonthName:='Septembre';
  52.   10:MonthName:='Octobre';
  53.   11:MonthName:='Novembre';
  54.   12:MonthName:='Décembre';
  55.   Else MonthName:='';
  56.  End;
  57. End;
  58.      
  59. Var
  60.  I:Integer;
  61.      
  62. BEGIN
  63.  For I := 1 To 12 do Begin
  64.   WriteLn(MonthName(I),' 2008');
  65.   WriteLn;
  66.   PutCalendar(2008, I, 3);
  67.  End;
  68. END.

on obtiendra le résultat suivant :

			
Janvier 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
             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    
Février 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
                               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    
Mars 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
                                     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    
Avril 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
             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    
Mai 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
                         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    

Juin 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
 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    
Juillet 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
             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    
Août 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
                               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    
Septembre 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
       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  
   Octobre 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
                   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    
Novembre 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
                                     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    
Décembre 2008
Diman Lundi Mardi Mercr Jeudi Vendr Samed
       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


Dernière mise à jour : Dimanche, le 17 août 2014