Curiosités mathématiques/Trouver le jour de la semaine avec une date donnée

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Cette page donne plusieurs méthodes de calcul pour trouver le jour de la semaine correspondant à une date donnée dans le calendrier grégorien. Le calendrier grégorien adopté au XVIe siècle succède au calendrier Julien, en modifiant la règle pour déterminer quelle année est bissextile.

La date d'adoption du calendrier varie selon le pays. Ces méthodes de calcul sont valables pour les dates à partir du 1er novembre 1582.

Méthode 1[modifier | modifier le wikicode]

Il y a une méthode plus simple que celles décrites ci-dessous pour trouver le jour d'une date.

C'est d'après l'Algorithme de Mike Keith[1] (dont est inspirée la Méthode 2)

Dans un article publié en 1990 dans le Journal of Recreational Mathematics, Vol. 22, No. 4, 1990, p. 280, Mike Keith propose un algorithme pour la détermination du jour de la semaine correspondant à une date quelconque. Sa formule est inspirée de la congruence de Zeller.

Mike Keith déclare lui-même qu'il s'agit là de la « plus simple formule possible » pour le calcul du jour de la semaine, « la meilleure qui puisse être construite », ajoute-t-il.

Dans sa forme opérationnelle, son algorithme en C s'écrit :

(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7

Comme Mike Keith est un mathématicien américain, d = Day pour Jour (d = 1 à 31) ; m = Month pour Mois (m = 1 à 12; 1 = Janvier, 2 = Février, 3 = Mars, ... , 12 = Décembre) et y = Year pour Année.

L'algorithme traduit les formules mathématiques suivantes :

Si m < 3 :

Sinon :

wd (weekday) est le jour de la semaine : 0 = Dimanche, 1 = Lundi, ... , 6 = Samedi.

En détails[modifier | modifier le wikicode]

  • La partie multipliant le mois par 23 et le divisant par 9 permet de calculer le décalage du jour de la semaine cumulé au cours de l'année selon le mois, alternant entre 2 pour les mois de 30 jours, et 3 pour les mois de 31 jours, avec une soustraction de 2 (différence entre les constantes 4 et 2 des deux formules) pour ajuster le cumul du mois de février (28 jours au lieu de 30).
  • Une année non bissextile comporte 365 jours, soit 52 semaines et 1 jour. Le jour de la semaine d'une date se décale donc d'un jour par année non bissextile, il faut donc ajouter le nombre d'années écoulées.
  • Une année bissextile comporte 366 jours, soit 52 semaines et 2 jours. Le jour de la semaine d'une date se décale donc de deux jours par année bissextile au lieu d'un seul, il faut donc ajouter en plus le nombre d'années bissextiles écoulées.
  • Une année est bissextile si elle est multiple de 4, mais non multiple de 100 à moins qu'elle soit multiple de 400. On ajoute donc l'année, l'année divisée par 4 pour le nombre d'années multiples de 4, moins (sauf) l'année divisée par 100 pour le nombre d'années multiples de 100, plus l'année divisée par 400 pour le nombre d'années multiples de 400.
  • Quand le mois est janvier ou février (m < 3) et que l'année courante est bissextile, elle ne doit pas être comptée comme écoulée car le mois de février n'est pas passé, et la formule utilise donc l'année précédente plutôt que l'année de la date.

Exemples[modifier | modifier le wikicode]

Quel jour de la semaine tombait le 18 janvier 1953 ?

(cas m < 3)

Le 18 janvier 1953 était un dimanche.


Quel jour de la semaine tombait le 2 août 1953 ?

(cas m > 3)

Le 2 août 1953 était un dimanche.


Quel jour de la semaine tombait le 13 mars 1998 ?

(cas m = 3)

Le 13 mars 1998 était un vendredi 13 !


Quel jour de la semaine tombait le 1er janvier 2020 ?

(cas m < 3)

Le 1er janvier 2020 était un mercredi.

Méthode 2[modifier | modifier le wikicode]

Pour une date de la forme jour/mois/année où « jour » prend une valeur de 01 à 31, « mois » de 01 à 12 et « année » de 1583 à 9999, utiliser la formule :

c = (14 - mois)/12

En fait, c = 1 pour janvier et février, c = 0 pour les autres mois.

a = année - c

m = mois + 12*c - 2

j = ( jour + a + a/4 - a/100 + a/400 + (31*m)/12 ) mod 7

La réponse obtenue pour j correspond alors à un jour de la semaine suivant :

0 = dimanche, 1 = lundi, 2 = mardi, etc.

Remarques[modifier | modifier le wikicode]

Dans toutes les divisions dans « / » dans la ligne Jour, on ne garde que la partie entière du résultat. Par exemple, 35/4= 8.

Enfin, mod 7 signifie « modulo la division par 7 », c'est-à-dire « le résultat est le reste de la division par 7 ».

(Par exemple, 23 mod 7 = 2, car le reste est 2.)

Exemple[modifier | modifier le wikicode]

Sur quel jour de la semaine tombe le 13 mars 2004 ?

On calcule c, a et m :

c = (14 - 3)/12 = 0, a = 2004 - 0 = 2004 et m = 3 + 12*0 - 2 = 1.

On trouve alors :

j = ( 13 + 2004 + 2004/4 - 2004/100 + 2004/400 + (31*1)/12 ) mod 7

j = ( 13 + 2004 + 501 - 20 + 5 + 2 ) mod 7

j = 2505 mod 7 = 6 (car 2505/7 = 357 et il reste 6.)

Donc le 13 mars 2004 était un samedi.

Méthode 3[modifier | modifier le wikicode]

En Italique, calcul du jour de la semaine de l'exemple 1er août 1947.

  1. On garde les deux derniers chiffres de l'année en question; (1947 → 47)
  2. On ajoute 1/4 de ce nombre en ignorant les restes; (47/4 = 11, reste 3 ignoré)
  3. On ajoute la journée du mois; (dans ce cas → 1)
  4. Selon le mois on ajoute
    Janvier = 0
    Février = 3
    Mars = 3
    Avril = 6
    Mai = 1 (= Ma1)
    Juin = 4
    Juillet = 6 (= 6uillet)
    Août = 2
    Septembre = 5 (= 5eptembre)
    Octobre = 0 (= 0ctobre)
    Novembre = 3
    Décembre = 5
    Entre parenthèse, des astuces pour se rappeler de cette correspondance.
  5. Si l'année est bissextile et le mois est janvier ou février, on ôte 1 , (1947 → année non bissextile)
  6. Selon le siècle, on ajoute : (19** → 0)
    Années 1600 = 6;
    Années 1700 = 4;
    Années 1800 = 2;
    Années 1900 = 0;
    Années 2000 = 6;
    Années 2100 = 4;
  7. On divise la somme par 7 et on garde le reste; (47 + 11 + 1 + 2 - 0 + 0 = 61; 61 divisé par 7 = 8, reste 5)
  8. Le reste représente le jour de la semaine recherché: (Le 1er août 1947 était un vendredi)
    0 pour Dimanche,
    1 pour Lundi,
    2 pour Mardi,
    3 pour Mercredi,
    4 pour Jeudi,
    5 pour Vendredi,
    6 pour Samedi.

De plus, on peut soustraire 28, 56 ou 84 à l'année, dès le départ, cela ne change pas le résultat.

Exemple : (19 + 4 + 1 + 2 - 0 + 0 = 26; 26 divisé par 7 = 3, reste 5). C'est un peu plus simple à faire de tête.

Avec ce qui précède, il est facile de calculer de tête le jour de la semaine correspondant à une date donnée.

Méthode 4[modifier | modifier le wikicode]

Cette méthode de calcul utilise la table suivante :

Valeur Année Mois (a) Mois (b) Jour Jour de la semaine
1 2 3 4 5 6 7 8
000  00  1 7 18   5 10 7 14 21 28 Lundi
+ 300  40  2 *   8 13 19 8 5 1 8 15 22 29 Mardi
 80  3 14 2 3 11 2 8 2 9 16 23 30 Mercredi
+ 200 *   4 9 15 6 3 11 3 10 17 24 31 Jeudi
 20  10 * 16 9 12 6 4 11 18 25 Vendredi
+ 100  60  *   0 5 11 4 7 9 12 5 12 19 26 Samedi
6 * 12 17 1 10 1 4   7   6 13 20 27 Dimanche

Utilisation[modifier | modifier le wikicode]

Une valeur de 0 à 6 (Colonne 1 : valeur) est attribuée à chaque ligne de la table. Dans cette méthode, on calcule la somme des valeurs des lignes sélectionnées à chacune des étapes suivantes (ex. : 15/12/1957) :

  1. (Colonne 2) Prendre la valeur de la ligne correspondant au siècle modulo 4 (000, 100, 200 ou 300) (ex. : 1957 → 19/4 = 3 mod 4 → 300, V = 1),
  2. (Colonne 3) Ajouter la valeur de la ligne correspondant à la vingtaine de l'année (ex. : 1957 → 40, V + 1 = 2),
  3. (Colonne 4) Ajouter la valeur de la ligne correspondant au reste de la division de l'année par 20 (ex. : 1957 → 17, V + 6 = 8),
  4. Si l'année se termine par 00 et s'il y a un « + » dans la cellule sélectionnée à l'étape 1, ajouter 1 et utiliser la colonne 5 pour le mois (ex. : 1957 pas concerné),
  5. Sinon, s'il y a un « * » dans la cellule sélectionnée à l'étape 3 (colonne 4), utiliser la colonne 6 pour le mois, sinon la colonne 5 (ex. : 1957 pas de « * », colonne 5),
  6. (Colonne 5 ou 6) Ajouter la valeur de la ligne correspondant au numéro du mois (ex. : 12, V + 4 = 12),
  7. (Colonne 7) Ajouter la valeur de la ligne correspondant au jour dans le mois (ex. : 15, V + 1 = 13),
  8. (Colonne 7) Le jour de la semaine (colonne 8) correspond à la ligne où se trouve le total dans la colonne 7 (ex. : 13, Dimanche 15/12/1957).
Valeur Année Mois (a) Mois (b) Jour Jour de la semaine
1 2 3 4 5 6 7 8
000  00  1 7 18   5 10 7 14 21 28 Lundi
+ 300  40  2 *   8 13 19 8 5 1 8 15 22 29 Mardi
 80  3 14 2 3 11 2 8 2 9 16 23 30 Mercredi
+ 200 *   4 9 15 6 3 11 3 10 17 24 31 Jeudi
 20  10 * 16 9 12 6 4 11 18 25 Vendredi
+ 100  60  *   0 5 11 4 7 9 12 5 12 19 26 Samedi
6 * 12 17 1 10 1 4   7   6 13 20 27 Dimanche

Exemple 15/12/1957 :  1 + 1 + 6 + 4 + 1  =  13  : Dimanche

Références[modifier | modifier le wikicode]

  1. http://c2.com/cgi/wiki?PerpetualCalendarAlgorithm

Wikipedia-logo-v2.svg

Wikipédia propose un article sur : « Détermination du jour ».