******************************************************************************** * C A L C U L D E L A J O U R N É E D ' U N E D A T E * ******************************************************************************** par Michel Michaud -------------------------------------------------------------------------------- Algorithme de MM -------------------------------------------------------------------------------- (Valide de 1901 à 2099, si rien ne change dans les calendriers d'ici là !) Soit j,m et a, les jours (1-31), mois (1-12) et année (1901-2099) et n une autre variable entière : SI m <= 2 m= m + 12 a= a - 1 FINSI n= j + (263*m + 50)/100 + a + a/4 SI m=12 n= n - 1 FINSI n= n MODULO 7 À la fin, n=0 indique un dimanche, n=1 indique un lundi, etc. -------------------------------------------------------------------------------- Congruence de Zeller -------------------------------------------------------------------------------- http://en.wikipedia.org/wiki/Zeller%27s_congruence Soit j,m et a, les jours (1-31), mois (1-12) et année (400 et plus) et n une autre variable entière : m= m - 2 SI m <= 0 m= m + 12 a= a - 1 FINSI n= a / 100 a= a MODULO 100 n= (((26*m)-2)/10 + j + a + a/4 + n/4 - 2*n + 140) MODULO 7 À la fin, n=0 indique un dimanche, n=1 indique un lundi, etc. -------------------------------------------------------------------------------- En C++ avec -------------------------------------------------------------------------------- (Limites probables : 1970-2035) int Journee(int j, int m, int a) { tm d={1,1,1,1,1,1,1,1,1}; d.tm_mday= j; d.tm_mon= m-1; d.tm_year= a-1900; mktime(&d); return d.tm_wday; } Renvoie 0 pour dimanche, 1 pour lundi, etc. --------------------------------------------------------------------------------