Congruencia de ZellerLa congruencia de Zeller es un algoritmo ideado por Julius Christian Johannes Zeller para calcular el día de la semana de cualquier fecha del calendario.[cita requerida] FórmulaPara el calendario gregoriano la congruencia de Zeller es: para el calendario juliano es: donde: representa la función de parte entera de redondeo. es la operación módulo que extrae el residuo de la división entre dos números. es el día de la semana (0 = sábado, 1 = domingo, 2 = lunes, 3 = martes, 4 = miércoles, 5 = jueves, 6 = viernes). es el día del mes. es el mes (3=marzo, 4=abril, , 13=enero, 14=febrero). Enero y febrero se cuentan como los meses 13 y 14 del año anterior. Es decir, que, en el caso del 2 de enero de 2013, 13 y el año es 2012. es la centuria. Es el redondeo inferior de la fracción . el año de la centuria. Se calcula como . En las implementaciones informáticas en las cuales el módulo de un número negativo es negativo, la manera más sencilla de obtener un resultado entre 0 y 6 es reemplazar por + y por . Implementación en softwareLas fórmulas se basan en la definición matemática de división de módulo, lo que significa que es igual a 5 positivo. Desafortunadamente, la mayoría de los lenguajes de computadora implementan la función de residuo, en forma tal que devuelve un resultade -2. Entonces, para implementar la congruencia de Zeller en una computadora, las fórmulas deben modificarse ligeramente para asegurar un numerador positivo. La forma más sencilla de hacerlo es reemplazar por y por . Entonces, las fórmulas se transforman así: para el calendario gregoriano, y: para el calendario juliano. Uno puede ver fácilmente que, en un año determinado, el 1 de marzo (si es un sábado, luego el 2 de marzo) es una buena fecha de prueba y que, en un siglo dado, el mejor año de prueba es aquel que sea un múltiplo de 100. Zeller usó la aritmética decimal, y encontró conveniente usar y para representar el año. Pero cuando se usa una computadora, es más sencillo manejar el año modificado , que es durante enero y febrero: para el calendario gregoriano (en este caso no hay posibilidad de desbordamiento porque ), y para el calendario Juliano. AnálisisEstas fórmulas se basan en la observación de que el día de la semana progresa de una manera predecible basada en cada subparte de esa fecha. Cada término de la fórmula se usa para calcular el desplazamiento necesario para obtener el día correcto de la semana. Por tanto, para el calendario gregoriano, las diversas partes de esta fórmula pueden entenderse así:
La razón por la que la fórmula difiere para el calendario juliano es que este calendario no tiene una regla aparte para las centurias bisiestas y está desplazado con respecto al calendario gregoriano un número fijo de días. Ambas diferencias se pueden tener en cuenta reemplazando el término por el término , o para evitar números negativos. Dado que el calendario gregoriano fue adoptado en diferentes momentos en diferentes partes del mundo, la ubicación de un evento es significativa a la hora de determinar el día de la semana correcto de una fecha que tuvo lugar durante este periodo de transición. AlgoritmoAlgoritmo Z(y, m, d) Entrada: El año y, mes m (1 ≤ m ≤ 12) y día d (1 ≤ d ≤ 31). Salida: El día de la semana. t ← (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4) n ← (domingo, lunes, martes, miércoles, jueves, viernes, sábado) if m < 3 y ← y - 1 w ← (y + ⌊y/4⌋ - ⌊y/100⌋ + ⌊y/400⌋ + tm-1 + d) mod 7 devolver nw Una forma más fácil de ver el mismo desarrollo es la siguiente a = (14 - Mes) / 12 y = Año - a m = Mes + 12 * a - 2 Para el calendario Juliano: d = (5 + dia + y + y/4 + (31*m)/12) mod 7 Para el calendario Gregoriano: d = (día + y + y/4 - y/100 + y/400 + (31*m)/12) mod 7 El resultado es un cero (0) para el domingo, 1 para el lunes… 6 para el sábado --------------------------------------------------------------- Ejemplo, ¿En qué día de la semana cae el 2 de agosto de 1953?? ' a = (14 - 8) / 12 = 0 ' y = 1953 - 0 = 1953 ' m = 8 + 12 * 0 - 2 = 6 ' d = (2 + 1953 + 1953 / 4 - 1953 / 100 + 1953 / 400 + (31 * 6) / 12) Mod 7 ' = (2 + 1953 + 488 - 19 + 4 + 15 ) mod 7 ' = 2443 mod 7 ' = 0 ' El valor cero(0) corresponde al domingo. La norma ISO 8601:2004La norma ISO 8601:2004, en su apartado 3.2.2 define el código de los días de la semana así como los nombres de los días de la semana (evidentemente están en inglés) pero lo que interesa resaltar es que la numeración que propone el estándar no coincide con la numeración que proporciona el algoritmo de Zeller (y por tanto, la función [DayOfWeek]) la diferencia está en la forma de contar, el algoritmo de Zeller proporciona valores del 0 (sábado) 1 domingo… hasta al 6(viernes), mientras que la norma ISO 8601, dice que los valores van desde el 1 lunes al 7 domingo. Véase tambiénReferencias
Enlaces externos |