Cálculo del día de la semana

La determinación del día de la semana para cualquier fecha se puede realizar con una variedad de algoritmos. Además, los calendarios perpetuos no requieren ningún cálculo por parte del usuario y son esencialmente tablas de búsqueda. Una aplicación típica es calcular el día de la semana en el que nació alguien u ocurrió un evento específico.

Conceptos

editar

En el cálculo numérico, los días de la semana se representan como números de días de la semana. Si el lunes es el primer día de la semana, los días se pueden codificar del 1 al 7, de lunes a domingo, de acuerdo con ISO 8601. El día designado con 7 también se puede contar como 0, aplicando el módulo aritmético 7, que calcula el resto de un número después de la división entre 7. Por lo tanto, el número 7 se trata como 0, 8 como 1, 9 como 2, 18 como 4 y así sucesivamente. Si el domingo se cuenta como día 1, 7 días después (es decir, el día 8) también es domingo, y el día 18 es el mismo que el día 4, que es miércoles, ya que viene tres días después del domingo.[1]

Estándar lunes martes miércoles jueves viernes sábado domingo Ejemplos de uso
ISO 8601 1 2 3 4 5 6 7 %_ISODOWI%, %@ISODOWI[]% (4DOS);[2]​ DAYOFWEEK() (HP Prime)[3]
0 1 2 3 4 5 6
2 3 4 5 6 7 1 %NDAY OF WEEK% (NetWare, DR-DOS[4]​); %_DOWI%, %@DOWI[]% (4DOS)[2]
1 2 3 4 5 6 0 Calculadoras financieras HP

El enfoque básico de casi todos los métodos para calcular el día de la semana comienza a partir de una 'fecha de anclaje': un par conocido (como el 1 de enero de 1800 como miércoles), que determina el número de días entre el día conocido y el día que está tratando de determinar, y utilizando módulo aritmético 7 para encontrar un nuevo día numérico de la semana.

Un enfoque estándar es buscar (o calcular, usando una regla conocida) el valor del primer día de la semana de un siglo dado, buscar (o calcular, usando un método de congruencia) un ajuste para el mes, calcular el número de años bisiestos desde el comienzo del siglo, y luego súmelos junto con el número de años desde el comienzo del siglo y el número de día del mes. Eventualmente, uno termina con un recuento de días al que se aplica módulo 7 para determinar el día de la semana de la fecha.[5]

Algunos métodos hacen todas las sumas primero y luego eliminan los sietes, mientras que otros los eliminan en cada paso, como en el método de Lewis Carroll. De cualquier manera es bastante viable: la primera es más fácil para calculadoras y programas de computadora, la segunda para cálculos mentales (es muy posible hacer todos los cálculos en la cabeza con un poco de práctica). Ninguno de los métodos que se proporcionan aquí realiza comprobaciones de rango, por lo que las fechas no razonables producirán resultados erróneos.

Días correspondientes

editar

Cada séptimo día del mes tiene el mismo nombre que el anterior:

Día del mes d
00 07 14 21 28 0
01 08 15 22 29 1
02 09 16 23 30 2
03 10 17 24 31 3
04 11 18 25 4
05 12 19 26 5
06 13 20 27 6

Meses correspondientes

editar

Los "meses correspondientes" son aquellos meses dentro del año calendario que comienzan el mismo día de la semana. Por ejemplo, septiembre y diciembre se corresponden, porque el 1 de septiembre cae el mismo día que el 1 de diciembre (ya que hay exactamente trece semanas de 7 días entre las dos fechas). Los meses solo pueden corresponder si el número de días entre sus primeros días es divisible entre 7, o en otras palabras, si sus primeros días están separados por un número entero de semanas. Por ejemplo, febrero de un año común corresponde a marzo porque febrero tiene 28 días, un número divisible entre 7, siendo 28 días exactamente cuatro semanas. En un año bisiesto, enero y febrero corresponden a meses diferentes a los de un año común, ya que agregar el 29 de febrero significa que cada mes subsiguiente comienza un día después.

Enero corresponde a octubre en años comunes y abril y julio en años bisiestos. Febrero corresponde a marzo y noviembre en años comunes y agosto en años bisiestos. Marzo siempre corresponde a noviembre, abril siempre corresponde a julio y septiembre siempre corresponde a diciembre. Agosto no corresponde a ningún otro mes de un año común. Octubre no corresponde a ningún otro mes de un año bisiesto. Mayo y junio nunca corresponden a ningún otro mes.

En la siguiente tabla de meses, los meses correspondientes tienen el mismo número, un hecho que se deriva directamente de la definición:

Años comunes Años bisiestos m
Ene Oct Oct 0
May May 1
Ago Feb Ago 2
Feb Mar Nov Mar Nov 3
Jun Jun 4
Sep Dic Sept Dic 5
Abr Jul Ene Abr Jul 6

Años correspondientes

editar

Hay siete días posibles en los que puede comenzar un año, y los años bisiestos alterarán el día de la semana después del 29 de febrero. Esto significa que hay 14 configuraciones que puede tener un año. Todas las configuraciones pueden ser referenciadas por una letra dominical, pero como el 29 de febrero no tiene ninguna letra asignada, un año bisiesto tiene dos letras dominicales, una para enero y febrero y la otra (un paso atrás en la secuencia alfabética) de marzo a diciembre.

Por ejemplo, 2019 fue un año común que comenzaba el martes, lo que indica que el año en su conjunto correspondía al año calendario 2013. Por otro lado, 2020 es un año bisiesto que comienza el miércoles y, en su conjunto, corresponde al año calendario 1992; en concreto, sus 2 primeros meses, excepto el 29 de febrero, corresponden a los del año calendario 2014, mientras que, debido al día bisiesto 2020, sus 10 meses posteriores corresponden al año calendario 2015.

Según lo anterior, cada año bisiesto se repite una vez cada 28 años, y cada año común se repite una vez cada 6 años y dos veces cada 11 años. Por ejemplo, la última ocurrencia de un año bisiesto que comienza un martes fue 2008 y la próxima ocurrencia será 2036. De la misma manera, los próximos años comunes que comienzan el miércoles serán 2025, 2031, 2042 y luego 2053. Ambas declaraciones son cierto a menos que se omita un año bisiesto, pero eso no sucederá hasta 2100. En el caso de que un año centenario no sea bisiesto, el próximo año bisiesto ocurrirá 40 años después de cualquier año bisiesto entre 12 y 28 años, inclusive, lejos a partir de ese año del siglo, y cualquier año bisiesto dentro de los 12 años siguientes al año del siglo volverá a ocurrir 12 años después.

Para obtener más detalles, consulte la tabla siguiente:

Año del

siglo mod 28

y
00 06 12 17 23 0
01 07 12 18 24 1
02 08 13 19 24 2
03 08 14 20 25 3
04 09 15 20 26 4
04 10 16 21 27 5
05 11 16 22 00 6

Notas:

  • Negro significa todos los meses del año común
  • Rojo significa los primeros 2 meses del año bisiesto
  • Azul significa los últimos 10 meses del año bisiesto

Siglos correspondientes

editar
Siglo juliano mod 700 Siglo gregoriano mod 400[6] Dpia
400: 1100 1800 ... 300: 1500 1900 ... Dom
300: 1000 1700 ... Lun
200 0900 1600 ... 200: 1800 2200 ... Mar
100 0800 1500 ... Mié
700: 1400 2100 ... 100: 1700 2100 ... Jue[7]
600: 1300 2000 ... Vie
500: 1200 1900 ... 000: 1600 2000 ... Sáb

"Año 000" es, en cronología normal, el año 1 AC (que precede al 1 DC). En el año astronómico, el año 0 se sitúa entre el 1 a. C. y el 1 d. C. En el calendario juliano proléptico, (es decir, el calendario juliano como habría sido si se hubiera operado correctamente desde el principio), el 1 a. C. comienza el jueves. En el calendario gregoriano proléptico, (llamado así porque no fue ideado hasta 1582), el 1 a. C. comienza el sábado.

Métodos tabulares para calcular el día de la semana

editar

Tabla completa: calendarios juliano y gregoriano

editar

Para las fechas julianas anteriores a 1300 y posteriores a 1999, debe utilizarse el año de la tabla que difiere en un múltiplo exacto de 700 años. Para las fechas gregorianas posteriores a 2299, se debe utilizar el año de la tabla que difiere en un múltiplo exacto de 400 años. Los valores " r0 " a " r6 " indican el resto cuando el valor de las centenas se divide entre 7 y 4 respectivamente, lo que indica cómo se extiende la serie en cualquier dirección. Tanto los valores julianos como los gregorianos se muestran 1500-1999 por conveniencia. Las cifras en negrita (por ejemplo, 04) indican un año bisiesto. Si un año termina en 00 y sus cientos están en negrita, es un año bisiesto. Así, 19 indica que 1900 no es un año bisiesto gregoriano, (pero 19 en la columna juliana indica que es un año bisiesto juliano, al igual que todos los años julianos x 00 años). 20 indica que 2000 es un año bisiesto. Utilice enero y febrero solo en años bisiestos.

Cientos de años Dígitos del año restante Mes Día de la semana #
Juliano
(r ÷ 7)
Gregoriano
(r ÷ 4)
r5 19 16 20 r0 00 06   17 23 28 34   45 51 56 62   73 79 84 90 Ene Oct Sábado 0
r4 18 15 19 r3 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96 May Domingo 1
r3 17
N/A
02   13 19 24 30   41 47 52 58   69 75 80 86   97 Feb Ago Lunes 2
r2 16 18 22 r2 03 08 14   25 31 36 42   53 59 64 70   81 87 92 98 Feb Mar Nov Martes 3
r1 15
N/A
  09 15 20 26   37 43 48 54   65 71 76 82   93 99 Jun Miércoles 4
r0 14 17 21 r1 04 10   21 27 32 38   49 55 60 66   77 83 88 94 Sep Dec Jueves 5
r6 13
N/A
05 11 16 22 33 39 44 50 61 67 72 78 89 95 Ene Abr Jul Viernes 6

Para determinar el día de la semana (1 de enero de 2000, sábado)

  • el día del mes: 1 ~ 31 (1)
  • el mes: (6)
  • el año: (0)
  • siglo mod 4 del calendario gregoriano y mod 7 para el calendario juliano (0).
  • sumar 1+6+0+0=7. Dividir entre 7 deja un residuo de 0, por lo que el día de la semana es sábado.

La fórmula es w = (d + m + y + c) mod 7.

Calendario juliano revisado

editar

Téngase en cuenta que la fecha (y, por lo tanto, el día de la semana) en los calendarios juliano y gregoriano revisados es la misma desde el 14 de octubre de 1923 hasta el 28 de febrero de 2800 d. C. inclusive y que para años grandes es posible restar 6300 o un múltiplo del mismo antes. comenzando para llegar a un año que esté dentro o más cerca de la mesa.

Para buscar el día de la semana de cualquier fecha de cualquier año usando la tabla, reste 100 del año, divida la diferencia entre 100, multiplique el cociente resultante (omitiendo las fracciones) por siete y divida el producto entre nueve. Tenga en cuenta el cociente (omitiendo fracciones). Ingrese la tabla con el año juliano, y justo antes de la división final sume 50 y reste el cociente anotado arriba.

Ejemplo: ¿Cuál es el día de la semana del 27 de enero de 8315?

8315-6300 = 2015, 2015-100 = 1915, 1915/100 = 19 resto 15, 19x7 = 133, 133/9 = 14 resto 7. 2015 es 700 años antes que 1315, por lo que se usa 1315. De la tabla: para cientos (13): 6. Para los dígitos restantes (15): 4. Para el mes (enero): 0. Para la fecha (27): 27. 6 + 4 + 0 + 27 + 50-14 = 73. 73/7 = 10 restante 3. Día de la semana = martes.

Dominical Letter

editar

Para encontrar la letra dominical, calcule el día de la semana para el 1 de enero o el 1 de octubre. Si es domingo, la letra dominical es A, si es sábado B, e igualmente hacia atrás a lo largo de la semana y hacia adelante a través del alfabeto hasta el lunes, que es G

Los años bisiestos tienen dos letras dominicales, por lo que para enero y febrero calcule el día de la semana para el 1 de enero y para marzo a diciembre calcule el día de la semana para el 1 de octubre.

Los años bisiestos son todos los años que se dividen exactamente entre cuatro con las siguientes excepciones:

En el calendario gregoriano, todos los años que se dividen exactamente entre 100 (excepto los que se dividen exactamente entre 400).

En el calendario juliano revisado, todos los años que se dividen exactamente entre 100 (excepto los que dan un resto 200 o 600 cuando se dividen entre 900).

El "día del juicio final"

editar

Este es un artefacto de las matemáticas recreativas. Consulte la regla del fin del mundo para obtener una explicación.

Verificar el resultado

editar

Utilice esta tabla para encontrar el día de la semana sin ningún cálculo.

Índice Lun
A
Mar
B
Mié
C
Jue
D
Vie
E
Sáb
F
Dom
G
Calendario gregoriano y juliano perpetuo

Utilice enero y febrero para los años bisiestos

Fecha de la letra en la fila del año para la letra de la fila del siglo

Todos los días C son días del juicio final

Siglo juliano Siglo gregoriano Fecha 01
08
15
22
29
02
09
16
23
30
03
10
17
24
31
04
11
18
25

05
12
19
26

06
13
20
27

07
14
21
28

12 19 16 20 Abr Jul Ene G A B C D E F 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96
13 20 Sep Dic F G A B C D E 02 13 19 24 30 41 47 52 58 69 75 80 86 97
14 21 17 21 Jun E F G A B C D 03 08 14 25 31 36 42 53 59 64 70 81 87 92 98
15 22 Feb Mar Nov D E F G A B C 09 15 20 26 37 43 48 54 65 71 76 82 93 99
16 23 18 22 Ago Feb C D E F G A B 04 10 21 27 32 38 49 55 60 66 77 83 88 94
17 24 May B C D E F G A 05 11 16 22 33 39 44 50 61 67 72 78 89 95
18 25 19 23 Ene Oct A B C D E F G 06 17 23 28 34 45 51 56 62 73 79 84 90 00
[Año/100] Siglo gregoriano 20
16
21
17
22
18
23
19
Año mod 100
Siglo juliano 19
12
20
13
21
14
22
15
23
16
24
17
25
18

Ejemplos:

  • Por método común:
26 de diciembre de 1893 (Gregoriano)

Diciembre es en la fila F y 26 se encuentra en la columna E, por lo que la carta para la fecha se encuentra en la fila C F y la columna E. 93 (años mod 100) está en la fila D (fila años) y la letra C en la fila años se encuentra en la columna G. 18 ([año / 100] en la columna del siglo gregoriano) está en la fila C (fila del siglo) y la letra en la fila del siglo y la columna G es B, por lo que el día de la semana es el martes.

13 de octubre de 1307 (Juliano)

El 13 de octubre es un día F. La letra F en la fila de años (07) se encuentra en la columna G . La letra en la fila del siglo (13) y la columna G es E, por lo que el día de la semana es el viernes.

Enero 1, 2000 (Gregoriano)

El 1 de enero corresponde a G, G en la fila del año ( 0 0) corresponde a F en la fila del siglo ( 20 ) y F corresponde al sábado.

Una fórmula concisa para el método: "La letra de fecha (G), la letra (G) está en la fila del año (0 0) para la letra (F) en la fila del siglo (20), y para el día, la letra (F) se convierte en día laborable (sábado)".

El método letra dominical

Cada día del año (excepto el 29 de febrero) tiene asignada una letra en la secuencia recurrente ABCDEFG. La serie comienza con A el 1 de enero y continúa hasta A nuevamente el 31 de diciembre. La letra del domingo es la que se opone a todos los domingos del año. Dado que el 29 de febrero no tiene carta, esto significa que la carta dominical de marzo a diciembre está un paso atrás en la secuencia en comparación con la de enero y febrero. La letra para cualquier fecha se encontrará donde la fila que contiene el mes (en negro) a la izquierda del "cuadrado latino" se encuentra con la columna que contiene la fecha sobre el "cuadrado latino". La letra del domingo se encontrará donde la columna que contiene el siglo (debajo del "cuadrado latino") se encuentra con la fila que contiene los dos últimos dígitos del año a la derecha del "cuadrado latino".

Entonces, por ejemplo, para encontrar el día de la semana del 16 de junio de 2020:

La columna "20" se encuentra con la fila "20" en "D". La fila "junio" se encuentra con la columna "16" en "F". Como F es dos letras desde D, el día de la semana es dos días desde el domingo, es decir, martes.

Algoritmos matemáticos

editar

Algoritmo de Gauss

editar

En una nota escrita a mano en una colección de tablas astronómicas, Carl Friedrich Gauss describió un método para calcular el día de la semana del 1 de enero de un año determinado. Nunca lo publicó. Finalmente se incluyó en sus obras completas en 1927.[8]

El método de Gauss fue aplicable al calendario gregoriano. Numeró los días de la semana del 0 al 6 comenzando con el domingo. Definió la siguiente operación: El día laborable del 1 de enero del año número A es[9]

 

o

 

del cual se puede derivar un método para el calendario juliano

 

o

 

dónde   es el resto después de la división de y entre m,[8]​ o y módulo m , y Y + 100 C = A.

Para el año 2000, A - 1 = 1999, Y - 1 = 99 y C = 19, el día de la semana del 1 de enero es

 
 

El día de la semana del último día del año número A - 1 o 0 de enero del año número A es

 

El día de la semana de 0 (un año común) o 1 (un año bisiesto) de enero en el año número A es

 

Para determinar el día de la semana de una fecha arbitraria, usaremos la siguiente tabla de búsqueda.

Meses 11
Ene
12
Feb
1
Mar
2
Abr
3
May
4
Jun
5
Jul
6
Ago
7
Sep
8
Oct
9
Nov
10
Dec
M
años comunes 0 3 3 6 1 4 6 2 5 0 3 5 m
años bisiestos 4 0 2 5 0 3 6 1 4 6
Algoritmo  

Nota: menos 1 si M es 11 o 12 y más 1 si M es menor de 11 en un año bisiesto.

El día de la semana para cualquier día del año número A es

 

o

 

donde D es el día del mes y A - 1 para enero o febrero.

Los días de semana para el 30 de abril de 1777 y el 23 de febrero de 1855 son

 

y

 

Esta fórmula también fue convertida en métodos gráficos y tabulares para calcular cualquier día de la semana por Kraitchik y Schwerdtfeger.[8][10]

Variación desigual

editar

Otra variación del algoritmo anterior también funciona sin tablas de búsqueda. Una pequeña desventaja es la inusual convención de conteo de meses y años. La formula es

 

dónde

  • Y es el año menos 1 para enero o febrero y el año para cualquier otro mes
  • y son los 2 últimos dígitos de Y
  • c son los primeros 2 dígitos de Y
  • d es el día del mes (1 a 31)
  • m es el mes cambiado (marzo = 1, ..., febrero = 12)
  • w es el día de la semana (0 = domingo, ..., 6 = sábado). Si w es negativo, se debe sumar 7.

Por ejemplo, 1 de enero de 2000 (año - 1 de enero)

 
 

|}

Nota: El primero es solo para un año bisiesto 00 y el segundo es para cualquier año 00.

El término   da los valores de meses: m

Mes m
enero 0
febrero 3
marzo 2
abril 5
mayo 0
junio 3
julio 5
agosto 1
septiembre 4
octubre 6
noviembre 2
diciembre 4

El término   da los valores de años: y

y mod 28 y
01 07 12 18 -- 1
02-13 19 24 2
03 08 14-25 3
-- 09 15 20 26 4
04 10-21 27 5
05 11 16 22 -- 6
06-17 23 00 0

El término   da los valores de los siglos: c

c mod 4 c
1 5
2 3
3 1
0 0

Ahora de la fórmula general:  ; El 1 de enero de 2000 se puede volver a calcular de la siguiente manera:

 

 

|}

Algoritmo de Zeller

editar

En el algoritmo de Zeller, los meses están numerados del 3 de marzo al 14 de febrero. Se supone que el año comienza en marzo; esto significa, por ejemplo, que enero de 1995 se tratará como el mes 13 de 1994.[11]​ La fórmula para el calendario gregoriano es

 

dónde

  • Y es el año menos 1 para enero o febrero y el año para cualquier otro mes
  • y son los 2 últimos dígitos de Y
  • c son los primeros 2 dígitos de Y
  • d es el día del mes (1 a 31)
  • m es el mes cambiado (marzo = 3, ... enero = 13, febrero = 14)
  • w es el día de la semana (1 = domingo, .. 0 = sábado)

La única diferencia es una entre el algoritmo de Zeller (Z) y el algoritmo de Gauss (G), es decir, Z - G = 1 = Domingo.

 
  (Marzo = 3 en Z pero marzo = 1 en G)
 
 

Entonces podemos obtener los valores de los meses a partir de los del algoritmo gaussiano agregando uno:

Mes m
enero 1
febrero 4
marzo 3
abril 6
mayo 1
junio 4
julio 6
agosto 2
septiembre 5
octubre 0
noviembre 3
diciembre 5

Algoritmo de Wang

editar

El algoritmo de Wang[12]​ para el calendario gregoriano es (la fórmula debe restarse de 1 si m es 1 o 2 y el año es bisiesto)

 

dónde

  •  es el último dígito del año
  •  es el último segundo dígito del año
  •  son los 2 primeros dígitos del año
  •  es el día del mes (1 a 31)
  •  es el mes (enero = 1, ... diciembre = 12)
  •  es el día de la semana (0 = domingo, .. 6 = sábado)
  •  es la función de días nulos con los valores enumerados en la siguiente tabla
m  
1 1 Un día
3 5 m + 2
5 7
7 9
9 3 m + 1
11 12
2 12 m + 3
4 2 m - 2
6 4
8 6
10 8
12 10

Se puede derivar un algoritmo para el calendario juliano del algoritmo anterior

 

donde   es un día del juicio.

m  
1 3 C día
3 7 m + 4
5 9
7 11
9 5 m - 4
11 7
2 0 m - 2
4 4 m
6 6
8 8
10 10
12 12

Otros algoritmos

editar

Método de Schwerdtfeger

editar

En un método parcialmente tabular de Schwerdtfeger, el año se divide en el siglo y el año de dos dígitos dentro del siglo. El enfoque depende del mes. Para m ≥ 3,

 

entonces g está entre 0 y 99. Para m = 1,2 ,

 

La fórmula para el día de la semana es[8]

 

donde se elige el módulo positivo.[8]

El valor de e se obtiene de la siguiente tabla:

m 1 2 3 4 5 6 7 8 9 10 11 12
e 0 3 2 5 0 3 5 1 4 6 2 4

El valor de f se obtiene de la siguiente tabla, que depende del calendario. Para el calendario gregoriano,[8]

c mod 4 0 1 2 3
f 0 5 3 1

Para el calendario juliano,[8]

c mod 7 0 1 2 3 4 5 6
f 5 4 3 2 1 0 6

Método de Lewis Carroll

editar

Charles Lutwidge Dodgson (Lewis Carroll) ideó un método que se asemeja a un rompecabezas, pero en parte tabular al usar los mismos números de índice para los meses que en la "Tabla completa: calendarios juliano y gregoriano" anterior. Enumera los mismos tres ajustes para los primeros tres meses de los años no bisiestos, uno más alto para el último, y da instrucciones crípticas para encontrar el resto; Sus ajustes por siglos se determinarán utilizando fórmulas similares a las de la tabla de siglos. Aunque explícito al afirmar que su método también funciona para fechas de estilo antiguo, su ejemplo se reproduce a continuación para determinar que "1676, 23 de febrero" es un miércoles, solo funciona en un calendario juliano que comienza el año el 1 de enero, en lugar del 25 de marzo como el "estilo antiguo".

Algoritmo:[13]

Tome la fecha indicada en 4 porciones, a saber. el número de siglos, el número de años transcurridos, el mes, el día del mes.

Calcule los siguientes 4 elementos, agregando cada uno, cuando lo encuentre, al total de los elementos anteriores. Cuando un artículo o un total exceda de 7, divida entre 7 y conserve el resto únicamente.

Ítem del siglo: Para ' Estilo antiguo ' (que terminó el 2 de septiembre de 1752) reste de 18. Para ' Estilo nuevo ' (que comenzó el 14 de septiembre de 1752) divida entre 4, tome más de 3, multiplique el resto por 2.

Ítem del año: Sume el número de docenas, el excedente y el número de 4 en el excedente.

Ítem del mes: si comienza o termina con una vocal, reste el número, indicando su lugar en el año, de 10. Esto, más el número de días, da el elemento del mes siguiente. El artículo de enero es "0"; para febrero o marzo, "3"; para diciembre, "12".

Ítem del día: El total así alcanzado debe corregirse, deduciendo "1" (primero sumando 7, si el total es "0"), si la fecha es enero o febrero en un año bisiesto, recordando que cada año, divisible entre 4, es un año bisiesto, excepto sólo los años-siglo, en "Nuevo estilo", cuando el número de siglos no es tan divisible (por ejemplo, 1800).

El resultado final da el día de la semana, "0" significa domingo, "1" lunes, y así sucesivamente.

Ejemplos:[13]

1783, 18 de septiembre

17, dividido entre 4, deja "1" encima; 1 de 3 da "2"; dos veces 2 es "4". 83 son 6 docenas y 11, dando 17; más 2 da 19, es decir (dividiendo entre 7) "5". Total 9, es decir, "2" El elemento de agosto es "8 de 10", es decir, "2"; entonces, para septiembre, es "2 más 31", es decir, "5" Total 7, es decir, "0", que se apaga. 18 da "4". Respuesta, "jueves".

1676, 23 de febrero

16 de 18 da "2" 76 son 6 docenas y 4, dando 10; más 1 da 11, es decir, "4". Total "6" El artículo de febrero es "3". Total 9, es decir, "2" 23 da "2". La corrección total "4" para el año bisiesto da "3". Respuesta, "miércoles".

Dado que el 23 de febrero de 1676 (contando febrero como el segundo mes) es, para Carroll, el mismo día que el gregoriano 4 de marzo de 1676, no llega a la respuesta correcta, a saber, "viernes", para una fecha de estilo antiguo que figura en el calendario gregoriano. es el mismo día que el 5 de marzo de 1677. Si hubiera asumido correctamente que el año comenzaría el 25 de marzo, su método habría tenido en cuenta los números de años diferentes, al igual que el cumpleaños de George Washington, entre los dos calendarios.

Es de destacar que aquellos que han vuelto a publicar el método de Carroll no han señalado su error, sobre todo Martin Gardner.[14]

En 1752, el Imperio Británico abandonó el uso del calendario juliano de estilo antiguo al adoptar el calendario gregoriano, que se ha convertido en el estándar actual en la mayoría de los países del mundo.

Métodos dependientes de la implementación

editar

En las expresiones de abajo en lenguaje C, y , m y d son, respectivamente, número entero variables que representan el año (por ejemplo, 1988), meses (1-12) y el día del mes (1-31).

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

En 1990, Michael Keith y Tom Craver publicaron la expresión anterior que busca minimizar el número de pulsaciones de teclas necesarias para ingresar a una función autónoma para convertir una fecha gregoriana en un día numérico de la semana.[15]​ No conserva ni y ni d , y devuelve 0 = domingo, 1 = lunes, etc.

Poco después, Hans Lachman simplificó su algoritmo para facilitar su uso en dispositivos de gama baja. Tal como se diseñó originalmente para calculadoras de cuatro funciones, su método necesita menos entradas de teclado al limitar su rango a 1905-2099 d. C. o fechas julianas históricas. Posteriormente se modificó para convertir cualquier fecha gregoriana, incluso en un ábaco. En los dispositivos basados en Motorola 68000 hay igualmente menos necesidad de registros de procesador o códigos de operación, según el objetivo de diseño previsto.[16]

Métodos de Sakamoto

editar

El precursor tabular para el algoritmo de Tøndering se materializa en la siguiente K & R C función.[17]​ Con cambios menores, fue adaptado para otros lenguajes de programación de alto nivel como APL2.[18]​ Publicado por Tomohiko Sakamoto en el grupo de noticias de Usenet comp.lang.c en 1992, es exacto para cualquier fecha gregoriana.[19][20]

    dayofweek(y, m, d)	/* 1 <= m <= 12,  y > 1752 (in the U.K.) */
    {
        static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
        if( m < 3 )
        {
          y -= 1;
        }
        return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
    }

La función no siempre conserva y , y devuelve 0 = domingo, 1 = lunes, etc. Por el contrario, la siguiente expresión

    dow(m,d,y) { y-=m<3; return(y+y/4-y/100+y/400+"-bed=pen+mad."[m]+d)%7; }

publicado simultáneamente por Sakamoto no es fácilmente adaptable a otros idiomas, e incluso puede fallar si se compila en una computadora que codifica caracteres utilizando valores distintos de estándar ASCII (por ejemplo, EBCDIC), o en compiladores C que hacen cumplir el cumplimiento de ANSI C (incluso en código que sigue siendo compatible con la especificación K&R C original , donde se supone que las declaraciones de tipo omitidas son números enteros). Solo para esta última consideración, la versión más detallada de Sakamoto podría considerarse no portátil, al igual que la de Keith y Craver.

Rata Die

editar

El método Rata Die de IBM's requiere que uno sepa el "día clave" del calendario gregoriano proléptico, es decir, el día de la semana del 1 de enero del 1 d. C. (su primera fecha). Esto debe hacerse para establecer el número restante en función del cual se determina el día de la semana para la última parte del análisis. Mediante el uso de un día dio a 13 de agosto de, 2009, que era un jueves como referencia, con Base y n es el número de días y semanas que ha sido desde 01/01/0001 al día dado, respectivamente, y k el día en el dado semana que debe ser inferior a 7, la base se expresa como

                      Base = 7n + k       (i)

Sabiendo que un año divisible entre 4 o 400 es un año bisiesto, mientras que un año divisible entre 100 y no 400 no es un año bisiesto, se puede escribir un programa de software para encontrar el número de días. La siguiente es una traducción a C del método de IBM para su lenguaje de programación REXX:

int daystotal (int y, int m, int d)
{
	static char daytab[2][13] =
	{
		{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
		{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
	};
	int daystotal = d;
	for (int year = 1 ; year <= y ; year++)
	{
		int max_month = ( year < y ? 12 : m-1 );
		int leap = (year%4 == 0);
		if (year%100 == 0 && year%400 != 0)
			leap = 0;
		for (int month = 1 ; month <= max_month ; month++)
		{
			daystotal += daytab[leap][month];
		}
	}
	return daystotal;
}

Se encuentra que daystotal es 733632 a partir de la fecha base del 1 de enero de AD 1. Este número total de días se puede verificar con un cálculo simple: Ya hay 2008 años completos desde el 01/01/0001. El número total de días en 2008 años sin contar los días bisiestos es 365 * 2008 = 732920 días. Suponga que todos los años divisibles entre 4 son años bisiestos. Sume 2008/4 = 502 al total; luego reste los 15 días bisiestos porque los años que son exactamente divisibles entre 100 pero no 400 no son bisiestos. Continúe agregando al nuevo total el número de días en los primeros siete meses de 2009 que ya han pasado, que son 31 + 28 + 31 + 30 + 31 + 30 + 31 = 212 días y los 13 días de agosto para obtener Base = 732920 + 502 - 20 + 5 + 212 + 13 = 733632.

Lo que esto significa es que han pasado 733632 días desde la fecha base. Sustituya el valor de Base en la ecuación anterior (i) para obtener 733632 = 7 * 104804 + 4, n = 104804 yk = 4, lo que implica que el 13 de agosto de 2009 es el cuarto día de la semana 104805 desde el 01/01/0001 . El 13 de agosto de 2009 es jueves; por lo tanto, el primer día de la semana debe ser el lunes, y se concluye que el primer día 01/01/0001 del calendario es el lunes . Con base en esto, el resto de la relación Base / 7 , definida anteriormente como k , decide qué día de la semana es. Si k = 0, es lunes, k = 1, es martes, etc.[21]

Véase también

editar

Referencias

editar
  1. Para explicar esto en detalle, visualice un calendario colgado en la pared que representa un mes que comienza el domingo (por ejemplo, marzo de 2020). Verás que el 1º es domingo. Ahora cuente siete días hacia adelante. Esto te lleva al 8, que también es domingo. Cuente diez días hacia adelante. Esto te lleva al día 18, que es miércoles. Ahora el 4 es miércoles (tres días después del domingo 1). Cuente siete días hacia adelante. Esto te lleva al miércoles 11, tres días después del domingo 8. Cuente otros siete días. Esto te lleva al miércoles 18, tres días después del domingo 15, que cae dos semanas después del domingo 1.
  2. a b Brothers, Hardin; Rawson, Tom; Conn, Rex C.; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. (27 de febrero de 2002). 4DOS 8.00 online help. 
  3. «HP Prime - Portal: Firmware update» (en alemán). Moravia Education. 15 de mayo de 2015. Archivado desde el original el 5 de noviembre de 2016. Consultado el 28 de agosto de 2015. 
  4. Paul, Matthias R. (30 de julio de 1997). NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. Release 157 (en alemán) (3rd edición). Archivado desde el original el 4 de noviembre de 2016. Consultado el 6 de agosto de 2014.  (NB. NWDOSTIP.TXT es un trabajo comprensivo sobre Novell DOS 7 yOpenDOS 7.01, incluyendo la descripción de muchas características internas no documentadas. Es parte del aún más largo MPDOSTIP.ZIP, colección mantenida hasta 2001 y distribuida en muchos sitios en ese momento.El enlace apunta a una Versión anterior convertida en HTML delarchivo NWDOSTIP.TXT.)
  5. Richards, E. G. (1999). Mapping Time: The Calendar and Its History. Oxford University Press. (requiere registro). 
  6. Los números en la primera columna son prolépticos - el calendario gregoriano no fue ideado hasta 1582. Ver la nota balo la tabla.
  7. El siglo juliano que comienza en el 1 a. C. también aparecería en esta línea de la tabla (a la izquierda de 700) pero no hay espacio para incluirla.
  8. a b c d e f g Schwerdtfeger, Berndt E. (7 de mayo de 2010). «Gauss' calendar formula for the day of the week» (1.4.26 edición). Consultado el 23 de diciembre de 2012. 
  9. Gauss, Carl F. (1981). «Den Wochentag des 1. Januar eines Jahres zu finden. Gueldene Zahl. Epakte. Ostergrenze.». Werke. herausgegeben von der Koeniglichen Gesellschaft der Wissenschaften zu Goettingen. (2nd edición). Hildesheim: Georg Olms Verlag. pp. 206-207. ISBN 978-3-48704643-3. 
  10. Kraitchik, Maurice (1942). «Chapter 5: The calendar». Mathematical recreations (2nd revised [Dover] edición). Mineola: Dover Publications. pp. 109-116. ISBN 978-0-48645358-3. 
  11. Stockton, J. R. (19 de marzo de 2010). «The Calendrical Works of Rektor Chr. Zeller: The Day-of-Week and Easter Formulae». Merlyn. Archivado desde el original el 29 de julio de 2013. Consultado el 19 de diciembre de 2012. 
  12. Wang, Xiang-Sheng (March 2015). «Calculating the day of the week: null-days algorithm». Recreational Mathematics Magazine (3): 5. 
  13. a b Dodgson, C.L., (Lewis Carroll) (31 de marzo de 1887). «"To find the day of the week for any given date".». Nature: 299-301. 
  14. Martin Gardner. (1996). The Universe in a Handkerchief: Lewis Carroll's Mathematical Recreations, Games, Puzzles, and Word Plays, pages 24-26. Springer-Verlag.
  15. Michael Keith; Tom Craver. (1990). The ultimate perpetual calendar? Journal of Recreational Mathematics, 22:4, pp.280-282.
  16. The 4-function Calculator; The Assembly of Motorola 68000 Orphans; The Abacus. gopher://sdf.org/1/users/retroburrowers/TemporalRetrology
  17. "Day-of-week algorithm NEEDED!" news:1993Apr20.075917.16920@sm.sony.co.jp
  18. APL2 IDIOMS workspace: Date and Time Algorithms, line 15. ftp://ftp.software.ibm.com/ps/products/apl2/info/APL2IDIOMS.pdf (2002)
  19. Google newsgroups:comp.lang.c. (December 1992). «Date -> Day of week conversion». Consultado el 21 de junio de 2020. 
  20. Google newsgroups:comp.lang.c. (1994). «DOW algorithm». Consultado el 21 de junio de 2020. 
  21. Manual de referencia de REXX/400 pag. 87 (1997).
  • Hale-Evans, Ron (2006). «Hack #43: Calculate any weekday». Mind performance hacks (1st edición). Beijing: O'Reilly. pp. 164–169. ISBN 9780596101534. (requiere registro). 
  • Thioux, Marc; Stark, David E.; Klaiman, Cheryl; Schultz, Robert T. (2006). «The day of the week when you were born in 700 ms: Calendar computation in an autistic savant.». Journal of Experimental Psychology: Human Perception and Performance 32 (5): 1155-1168. doi:10.1037/0096-1523.32.5.1155. 
  • Treffert, Darold A. «Why calendar calculating?». Islands of genius : the bountiful mind of the autistic, acquired, and sudden savant (1. publ., [repr.]. edición). London: Jessica Kingsley. pp. 63-66. ISBN 9781849058735. 

Enlaces externos

editar