Algoritmia/Algoritmo para calcular el día de la semana

De testwiki
Revisión del 03:17 2 jul 2022 de 186.155.33.28 (discusión) (Ejemplo)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Para determinar el día de la semana de una fecha del calendario gregoriano, debemos seguir el siguiente procedimiento.

  1. Calcular la cantidad de días transcurridos hasta la fecha.
  2. Calcular el módulo con respecto a 7.
  3. El valor obtenido será el día de la semana de la fecha.

Esto lo podemos expresar de la siguiente manera:

d=((A1)*365+(A1)/4(3*((A1)/100+1)/4)+DM+D)%7

Sin embargo, en realidad no debemos calcular el total de días, sino únicamente los módulos con respecto a 7. Entonces, nuestra expresión se reduce así:

d=((A1)%7+((A1)/4(3*((A1)/100+1)/4))%7+DM%7+D%7)%7

Donde
d = día de la semana
A = Año
DM = Días transcurridos hasta antes del primer día del mes
D = Día

/ División entera
% Módulo

Además:

    Tengamos en cuenta que debemos conocer el módulo correspondiente a cada "inicio" de mes. Así, Si estamos buscando una fecha de julio, el módulo sería:
    x=(31%7+28%7+31%7+30%7+31%7+30%7)%7
    x=(3+0+3+2+3+2)%7
    x=6

Crearemos entonces una tabla que contenga los módulos acumulados por mes.

E F M A M J J A S O N D
0 3 3 6 1 4 6 2 5 0 3 5
0 3 4 0 2 5 0 3 6 1 4 6

La primera fila es para años regulares y la segunda para años bisiestos

Por último nuestro algoritmo quedaría así:
d=((A1)%7+((A1)/4(3*((A1)/100+1)/4))%7+M+D%7)%7

donde
M = Es el módulo correspondiente al mes

Tener en cuenta que para que este método funcione se deben redondear las divisiones al valor entero inferior.

Ejemplo

Calcular el día de la semana para el 25 de enero del 2007

A=2007
M=1
D=25

(A1)%7=2006%7=4
((A1)/4(3*((A1)/100+1)/4))%7=(5013*5)%7=3
D%7=25%7=4

d=(4+3+1+4)%7=5

Si 0 es domingo, entonces 5 corresponde a viernes