Congruencia de Zeller - Zeller's congruence

La congruencia de Zeller es un algoritmo ideado por Christian Zeller para calcular el día de la semana para cualquier fecha del calendario juliano o gregoriano . Se puede considerar que se basa en la conversión entre el día juliano y la fecha del calendario.

Fórmula

Para el calendario gregoriano, la congruencia de Zeller es

para el calendario juliano es

dónde

  • h es el día de la semana (0 = sábado, 1 = domingo, 2 = lunes, ..., 6 = viernes)
  • q es el día del mes
  • m es el mes (3 = marzo, 4 = abril, 5 = mayo, ..., 14 = febrero)
  • K el año del siglo ( ).
  • J es el siglo de base cero (en realidad ). Por ejemplo, los siglos de base cero para 1995 y 2000 son 19 y 20 respectivamente (no confundir con la enumeración de siglo ordinal común que indica 20 para ambos casos).
  • es la función de piso o parte entera
  • mod es la operación de módulo o resto después de la división

En este algoritmo, enero y febrero se cuentan como los meses 13 y 14 del año anterior. Por ejemplo, si es el 2 de febrero de 2010, el algoritmo cuenta la fecha como el segundo día del decimocuarto mes de 2009 (14/02/2009 en formato DD / MM / AAAA)

Para una fecha de semana ISO Día de la semana d (1 = lunes a 7 = domingo), utilice

Análisis

Estas fórmulas se basan en la observación de que el día de la semana progresa de una manera predecible en función de cada subparte de esa fecha. Cada término dentro de la fórmula se usa para calcular la compensación necesaria para obtener el día correcto de la semana.

Para el calendario gregoriano, las distintas partes de esta fórmula pueden entenderse de la siguiente manera:

  • representa la progresión del día de la semana en función del día del mes, ya que cada día sucesivo da como resultado un desplazamiento adicional de 1 en el día de la semana.
  • representa la progresión del día de la semana en función del año. Suponiendo que cada año tiene una duración de 365 días, la misma fecha en cada año siguiente se compensará con un valor de .
  • Dado que hay 366 días en cada año bisiesto, esto debe tenerse en cuenta agregando otro día al valor de compensación del día de la semana. Esto se logra agregando al desplazamiento. Este término se calcula como un resultado entero. Cualquier resto se descarta.
  • Usando una lógica similar, la progresión del día de la semana para cada siglo puede calcularse observando que hay 36524 días en un siglo normal y 36525 días en cada siglo divisibles por 400. Desde y , el término explica esto.
  • El plazo se ajusta por la variación de los días del mes. A partir de enero, los días de un mes son {31, 28/29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}. Los días 28 o 29 de febrero son un problema, por lo que la fórmula se extiende hasta el final de enero y febrero para que el conteo corto de febrero no cause ningún problema. La fórmula está interesada en los días de la semana, por lo que los números de la secuencia se pueden tomar módulo 7. Entonces, la cantidad de días en un mes módulo 7 (aún comenzando con enero) sería {3, 0/1, 3, 2 , 3, 2, 3, 3, 2, 3, 2, 3}. A partir de marzo, la secuencia básicamente alterna 3, 2, 3, 2, 3, pero cada cinco meses hay dos meses seguidos de 31 días (julio-agosto y diciembre-enero). La fracción 13/5 = 2.6 y la función piso tienen ese efecto; el denominador de 5 establece un período de 5 meses.
  • La función general , normaliza el resultado para que resida en el rango de 0 a 6, lo que produce el índice del día correcto de la semana para la fecha que se analiza.

La razón por la que la fórmula difiere para el calendario juliano es que este calendario no tiene una regla separada para los siglos bisiestos y está compensado del calendario gregoriano por un número fijo de días en cada siglo.

Dado que el calendario gregoriano se adoptó en diferentes momentos en diferentes regiones del mundo, la ubicación de un evento es importante para determinar el día correcto de la semana para una fecha que ocurrió durante este período de transición. Esto solo se requiere hasta 1929, ya que este fue el último año en que el calendario juliano todavía estaba en uso en cualquier país de la tierra y, por lo tanto, no se requiere para 1930 o posteriores.

Las fórmulas se pueden usar prolépticamente , pero el "año 0" es de hecho el año 1 a. C. (ver numeración astronómica de años ). El calendario juliano es de hecho proléptico hasta el 1 de marzo del 4 d.C. debido a la mala gestión en Roma (pero no en Egipto) en el período desde que el calendario entró en vigor el 1 de enero de 45 a.C. (que no fue un año bisiesto). Además, el operador de módulo puede truncar números enteros en la dirección incorrecta (techo en lugar de piso). Para adaptarse a esto, se puede agregar un múltiplo suficiente de 400 años gregorianos o 700 julianos.

Ejemplos de

Para el 1 de enero de 2000, la fecha se trataría como el decimotercer mes de 1999, por lo que los valores serían:

Entonces la fórmula se evalúa como .

(El 36 proviene de , truncado a un número entero).

Sin embargo, para el 1 de marzo de 2000, la fecha se trata como el tercer mes de 2000, por lo que los valores se convierten en

por lo que la fórmula se evalúa como .

Implementaciones en software

Modificación básica

Las fórmulas se basan en la definición matemática de división en módulo , lo que significa que −2 mod 7 es igual a 5 positivo. Desafortunadamente, en la forma truncada, la mayoría de los lenguajes de computadora implementan la función de resto, −2 mod 7 devuelve un resultado de −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 - 2 J por + 5 J y - J por + 6 J . Entonces las fórmulas se convierten en:

para el calendario gregoriano, y

para el calendario juliano.

Uno puede ver fácilmente que, en un año dado, el 1 de marzo (si es sábado, entonces el 2 de marzo) es una buena fecha de prueba; y que, en un siglo dado, el mejor año de prueba es el múltiplo de 100.

Simplificación común

Zeller usó aritmética decimal y consideró conveniente usar J y K para representar el año. Sin embargo, al utilizar un ordenador, es más sencillo de manejar el año modificada Y y el mes m , que son S - 1 y m + 3 meses de enero y febrero:

para el calendario gregoriano (en este caso no hay posibilidad de desbordamiento porque ), y

para el calendario juliano.

El algoritmo anterior se menciona para el caso gregoriano en RFC  3339 , Apéndice B, aunque en una forma abreviada que devuelve 0 para el domingo.

Otras variaciones

Al menos otros tres algoritmos comparten la estructura general de la congruencia de Zeller en su tipo de "simplificación común", utilizando también un m ∈ [3, 14] ∩ Z y el constructo de "año modificado".

  • Michael Keith publicó un fragmento de código C muy corto en 1990 para fechas gregorianas. El componente de duración del mes ( ) se reemplaza por .
  • JR Stockton proporciona una versión Sunday-is-0 , llamándola una variación de Zeller.
  • Claus Tøndering describe como un reemplazo.

Se puede mostrar que ambas expresiones progresan de una manera que está desviada en uno en comparación con el componente de duración del mes original en el rango requerido de m , lo que da como resultado un valor inicial de 0 para el domingo.

Ver también

Referencias

Bibliografía

Cada uno de estos cuatro documentos con imágenes similares se ocupa en primer lugar del día de la semana y, en segundo lugar, de la fecha del domingo de Pascua, para los calendarios juliano y gregoriano. Las páginas enlazan con traducciones al inglés.

enlaces externos