Determinación del día de la semana

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

La determinación del día de la semana de una fecha determinada 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 consulta. Una aplicación típica es calcular el día de la semana en que nació alguien o en que ocurrió un evento específico.

Conceptos

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

EstándarLunesMartesMiércolesJuevesViernesSábadoDomingoEjemplos de uso
ISO 86011234567%_ISODOWI%, %@ISODOWI[]% ( 4DOS ); [1] DÍA DE LA SEMANA() ( HP Prime ) [2]
0123456
2345671%NDIA DE LA SEMANA% ( NetWare , DR-DOS [3] ); %_DOWI%, %@DOWI[]% ( 4DOS ) [1]
1234560Calculadoras financieras HP

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

Un método estándar consiste en buscar (o calcular, utilizando una regla conocida) el valor del primer día de la semana de un siglo determinado, buscar (o calcular, utilizando 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 sumar estos datos junto con el número de años desde el comienzo del siglo y el número del día del mes. Finalmente, se obtiene un recuento de días al que se aplica el módulo 7 para determinar el día de la semana de la fecha. [4]

Algunos métodos hacen todas las sumas primero y luego descartan los sietes, mientras que otros los descartan en cada paso, como en el método de Lewis Carroll. Cualquiera de los dos métodos es bastante viable: el primero es más fácil para las calculadoras y los programas informáticos, el segundo para el cálculo mental (es muy posible hacer todos los cálculos en la cabeza con un poco de práctica). Ninguno de los métodos que se dan aquí realiza comprobaciones de rango, por lo que las fechas poco razonables producirán resultados erróneos.

Días correspondientes

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

Día del
mes
d
00 07 14 21 280
01 08 15 22 291
02 09 16 23 302
03 10 17 24 313
04 11 18 254
05 12 19 265
06 13 20 276

Meses correspondientes

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 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 por 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 por 7, siendo 28 días exactamente cuatro semanas. En un año bisiesto , enero y febrero corresponden a meses diferentes que en un año común, ya que sumar 29 febrero significa que cada mes posterior 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 en un año común. Octubre no corresponde a ningún otro mes en un año bisiesto. Mayo y junio nunca corresponden a ningún otro mes.

En la tabla de meses que aparece a continuación, los meses correspondientes tienen el mismo número, hecho que se desprende directamente de la definición.

Años comunesAños bisiestosTodos los añosmetro
EneOct0
Puede1
FebAgo2
FebMarzo Noviembre3
Jun4
septiembre diciembre5
EneAbr. Julio6

Años correspondientes

Hay siete días posibles en los que puede comenzar un año, y los años bisiestos cambiará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 referenciarse con 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) para marzo a diciembre.

2021 es un año común que comienza en viernes, lo que significa que corresponde al año calendario 2010. Los dos primeros meses de 2021 corresponden a los dos primeros meses de 2016. 2022 es un año común que comienza en sábado, lo que significa que corresponde al año calendario 2011. Los últimos diez meses de 2022 corresponden a los últimos diez meses de 2016. 2023 es un año común que comienza en domingo, lo que significa que corresponde al año calendario 2017. 2024 es un año bisiesto que comienza en lunes, lo que significa que corresponde al año calendario 1996. Los dos primeros meses de 2024 corresponden a los dos primeros meses de 2018. Los últimos diez meses de 2024 corresponden a los últimos diez meses de 2013.

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, el último año bisiesto que comenzó en miércoles fue 2020 y el próximo será 2048. Del mismo modo, los próximos años comunes que comiencen en viernes serán 2027, 2038 y luego 2049. Ambas afirmaciones son verdaderas a menos que se salte un año bisiesto, pero eso no sucederá hasta 2100.

Para más detalles consulte la tabla siguiente.

Año del
siglo mod 28
y
00 06 12 17 230
01 07 12 18 241
02 08 13 19 242
03 08 14 20 253
04 09 15 20 264
04 10 16 21 275
05 11 16 22 006

Notas:

  • El negro significa todos los meses del año común.
  • Rojo significa los primeros 2 meses del año bisiesto.
  • El azul significa los últimos 10 meses del año bisiesto.

Siglos correspondientes

Siglo juliano
mod 700
Siglo gregoriano
mod 400 [b]
Día
400:1100 1800...300:15001900...Sol
300:10001700...Lun
200 0900 1600 ...200:1800 2200...Mar
100 0800 1500 ...Casarse
700:1400 2100...100:1700 2100...Jueves [c]
600:1300 2000...Vie
500:1200 1900...000:1600 2000...Se sentó

El "año 000" es, en cronología normal, el año 1 a. C. (que precede al 1 d. C.). En la numeración astronómica de los años, 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 tal como habría sido si se hubiera aplicado correctamente desde el principio), el 1 a. C. comienza en jueves. En el calendario gregoriano proléptico (llamado así porque no se ideó hasta 1582), el 1 a. C. comienza en sábado.

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

Tabla completa: calendarios juliano y gregoriano

Para las fechas julianas anteriores a 1300 y posteriores a 1999, se debe utilizar 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 por 7 y 4 respectivamente, indicando cómo se extiende la serie en cualquier dirección. Tanto los valores julianos como los gregorianos se muestran de 1500 a 1999 para mayor comodidad. Las cifras en negrita (por ejemplo, 04 ) denotan año bisiesto. Si un año termina en 00 y sus centenas están en negrita, es un año bisiesto. Por lo tanto, 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, como lo son todos los años julianos x 00). 20 indica que 2000 es un año bisiesto. Utilice enero y febrero sólo en años bisiestos.

Cientos de añosDígitos restantes del añoMes
Departamento de Guerra
#
Julián
(r÷7)
Gregoriano
(r ÷ 4)
r5 1916 20 r000 06 17 2328 34 45 5156 62 73 7984 90EneOct0
r4 1815 19 r301 07 12 1829 35 40 4657 63 68 7485 91 96PuedeSu1
r3 1702 13 19 2430 41 47 5258 69 75 8086 97FebAgoMETRO2
r216 18 22 r203 08 14 2531 36 42 5359 64 70 8187 92 98FebMarNov3
r1 15  09 15 20 26  37 43 48 54  65 71 76 82  93 99JunYo4
r014 17 21 vuelta 104 10 21 2732 38 49 5560 66 77 8388 94SepDicEl5
r6 1305 11 16 2233 39 44 5061 67 72 7889 95EneAbrJulF6

Para la determinación del 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)
  • el siglo mod 4 para el calendario gregoriano y mod 7 para el calendario juliano (0) .
  • sumando 1+6+0+0=7. Al dividir por 7 queda un resto 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

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 los años grandes puede ser posible restar 6300 o un múltiplo de ello antes de comenzar para así llegar a un año que esté dentro o más cerca de la tabla.

Para buscar el día de la semana de cualquier fecha de cualquier año utilizando la tabla, reste 100 al año, divida la diferencia por 100, multiplique el cociente resultante (omitiendo las fracciones) por siete y divida el producto por nueve. Anote el cociente (omitiendo las fracciones). Ingrese la tabla con el año juliano y, justo antes de la división final, agregue 50 y reste el cociente anotado anteriormente.

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, 19×7=133, 133/9=14 resto 7. 2015 está 700 años adelantado respecto a 1315, por lo que se utiliza 1315. De la tabla: para centenas (13): 6. Para dígitos restantes (15): 4. Para mes (enero): 0. Para fecha (27): 27. 6 + 4 + 0 + 27 + 50 − 14 = 73 . 73/7=10 resto 3. Día de la semana = martes.

Carta Dominical

Para encontrar la letra dominical , calcula el día de la semana correspondiente al 1 de enero o al 1 de octubre. Si es domingo, la letra dominical es A, si es sábado, B, y de manera similar, 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 por cuatro con las siguientes excepciones:

En el calendario gregoriano : todos los años que se dividen exactamente por 100 (excepto aquellos que se dividen exactamente por 400).

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

El "día del juicio final"

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

Comprueba el resultado

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

ÍndiceLunes
A
Martes
B
Miércoles
C
Jueves
D
Viernes
E
Sábado
Viernes
Sol
G
Calendario gregoriano y juliano perpetuos
Utilice enero y febrero para los años bisiestos
Fecha la letra en la fila del año para la letra en la fila del siglo

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


Siglo juliano

Siglo gregoriano
Fecha01
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 1916 20AbrJulEneGRAMOABdoDmiF010712182935404657636874859196
13 20SepDicFGRAMOABdoDmi0213192430414752586975808697
14 2117 21JunmiFGRAMOABdoD030814253136425359647081879298
15 22FebMarNovDmiFGRAMOABdo0915202637434854657176829399
16 2318 22AgoFebdoDmiFGRAMOAB0410212732384955606677838894
17 24PuedeBdoDmiFGRAMOA0511162233394450616772788995
18 2519 23EneOctABdoDmiFGRAMO061723283445515662737984900 0
[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:

  • Para el método común
26 de diciembre de 1893 (GD)

Diciembre está en la fila F y 26 está en la columna E , por lo que la letra de la fecha es C, ubicada en la fila F y la columna E. 93 (año mod 100) está en la fila D (fila del año) y la letra C en la fila del año está ubicada 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 martes.

13 de octubre de 1307 (JD)

El 13 de octubre es un día F. La letra F en la fila del año (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 viernes.

1 de enero de 2000 (GD)

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: "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 de la semana (sábado)" .

El método de la Carta Dominical

Cada día del año (excepto el 29 de febrero) tiene una letra asignada 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 encuentra junto a todos los domingos del año. Como el 29 de febrero no tiene letra, esto significa que la letra del domingo para 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 une 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 une con la fila que contiene los dos últimos dígitos del año a la derecha del "cuadrado latino". Para un año bisiesto, la letra del domingo encontrada de esta manera es la que se aplica a marzo a diciembre.

Así, 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 está dos letras después de D, el día de la semana está dos días después del domingo, es decir, martes.

Algoritmos matemáticos

Rata muere

El método Rata Die funciona sumando la cantidad de días d que han transcurrido desde una fecha de día de la semana conocido D . El día de la semana se obtiene entonces mediante ( D + d ) mod 7 , de acuerdo con la convención que se haya utilizado para codificar D .

Por ejemplo, la fecha del 13 de agosto de 2009 es 733632 días a partir del 1 de enero del año 1 d.C. Tomando el número módulo 7, obtenemos 4, es decir, jueves.

Algoritmo de Gauss

Carl Friedrich Gauss describió un método para calcular el día de la semana correspondiente al 1 de enero de un año determinado en una nota manuscrita incluida en una colección de tablas astronómicas. [5] Nunca lo publicó. Finalmente, se incluyó en sus obras completas en 1927. [6] En comparación con Rata Die, el resultado ayuda a simplificar el recuento de años.

El método de Gauss era aplicable al calendario gregoriano. Numeró los días de la semana del 0 al 6 a partir del domingo. Definió la siguiente operación.

Entradas
Año número A , mes número M , fecha número D.
Producción
Día del año.
Procedimiento
  1. Primero determine el día de la semana d 1 del 1 de enero.
    • Para un calendario gregoriano, el día de la semana es [5]
           (1 + 5(( A −1) % 4) + 4(( A −1) % 100) + 6(( A −1) % 400)) % 7. Alternativamente, establezca C = A \ 100 , Y = A  % 100 y el valor es
           (1 + 5(( Y −1)%4) + 3( Y −1) + 5(C%4)) % 7.
    • Para un calendario juliano, el día de la semana es
           (6 + 5(( A −1)%4) + 3( A −1)) % 7 o
           (6 + 5(( Y −1) % 4) + 3( Y −1) + 6C) % 7 .
  2. Ahora determine el desplazamiento relacionado con el mes m utilizando la tabla de búsqueda con M.
  3. Devuelve d = ( d 1 + m + D ) % 7 .
Tabla de compensaciones mensuales
MesesEneFebMarAbrPuedeJunJulAgoSepOctNovDic
Años comunes033614625035
Años bisiestos4025036146

El procedimiento anterior se puede condensar en una única expresión para el caso gregoriano:
     (D + m + 5(( A −1)%4) + 4(( A −1)%100) + 6(( A −1)%400))%7

Ejemplo resuelto

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

= (1 + 5(1999%4) + 4(1999%100) + 6(1999%400))%7
= (1 + 1 + 4 + 0) % 7
= 6
= (1 + 5(99%4) + 3 × 99 + 5(19%4))%7
= (1 + 1 + 3 + 1)%7
= 6 = sábado.

Los días laborables del 30 de abril de 1777 y del 23 de febrero de 1855 son

= (30 + 6 + 5(1776%4) + 4(1776%100) + 6(1776%400))%7
= (2 + 6 + 0 + 3 + 6)%7
= 3 = miércoles

y

= (6 + 23 + ⌈2,6 × 12⌉ + 5(1854%4) + 4(1854%100) + 6(1854%400))%7
= (6 + 2 + 4 + 3 + 6 + 5)%7
= 5 = viernes.

Explicación y notas

El algoritmo para el día de la semana del 1 de enero se puede demostrar mediante aritmética de módulo. El punto principal es que, como 365 % 7 = 1 , cada año suma 1 día a la progresión. El resto es un ajuste para el año bisiesto. Las versiones basadas en siglos tienen 36525 % 7 = 6 .

La tabla de desfases entre meses muestra una divergencia en febrero debido al año bisiesto. Una técnica común (que luego utilizó Zeller) es desplazar el mes para que comience en marzo, de modo que el día bisiesto esté al final del conteo. Además, como Zeller demostró más tarde, la tabla se puede reemplazar por una expresión aritmética.

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. [6] [7]

Variación dispar

La siguiente fórmula es un ejemplo de una versión sin tabla de búsqueda. Se supone que el año comienza en marzo, lo que significa que las fechas de enero y febrero deben considerarse parte del año anterior. La fórmula para el calendario gregoriano es [8]

el = ( d + 2.6 metro 0,2 + y + y 4 + do 4 2 do ) modificación 7 , {\displaystyle w=\left(d+\lpiso 2,6m-0,2\rpiso +y+\left\lpiso {\frac {y}{4}}\right\rpiso +\left\lpiso {\frac {c}{4}}\right\rpiso -2c\right){\bmod {7}},}

dónde

  • d es el día del mes (1 al 31)
  • m es el mes desplazado (marzo = 1,..., febrero = 12)
  • Y es el año a menos que m sea 11 = enero o 12 = febrero, que se consideran parte del año anterior, dando Y = año − 1
  • c es el siglo dado por do = Y / 100 {\displaystyle c=\lpiso Y/100\rpiso}
  • y es el año relativo al siglo, dado por , o simplemente los 2 últimos dígitos de Y y = Y 100 do {\displaystyle y=Y-100c}
  • w es el día de la semana (0 = domingo,...,6 = sábado)
Tabla de desfases mensuales ( ) 2.6 metro 0,2 {\displaystyle \lpiso 2,6m-0,2\rpiso}
MesesMarAbrPuedeJunJulAgoSepOctNovDicEneFeb
Compensar257101215182023252831

Algoritmo de Zeller

En el algoritmo de Zeller, los meses se numeran desde el 3 para marzo hasta el 14 para febrero. Se supone que el año comienza en marzo; esto significa, por ejemplo, que enero de 1995 debe considerarse el mes 13 de 1994. [9] La fórmula para el calendario gregoriano es donde
el ( 13 ( metro + 1 ) 5 + y 4 + do 4 + d + y 2 do ) modificación 7 {\displaystyle w\equiv \left(\left\lfloor {\frac {13(m+1)}{5}}\right\rfloor +\left\lfloor {\frac {y}{4}}\right\rfloor +\left\lfloor {\frac {c}{4}}\right\rfloor +d+y-2c\right){\bmod {7}}}

  • d {\estilo de visualización d} es el día del mes (1 al 31)
  • metro {\estilo de visualización m} es el mes desplazado (marzo=3,...enero=13, febrero=14)
  • Y {\estilo de visualización Y} es el año a menos que sea 13 = enero o 14 = febrero, que se consideran parte del año anterior, dando metro {\estilo de visualización m} Y = año 1 {\displaystyle Y={\textit {año}}-1}
  • do {\estilo de visualización c} ¿Es el siglo dado por do = Y / 100 {\displaystyle c=\lpiso Y/100\rpiso}
  • y {\estilo de visualización y} es el año relativo al siglo, dado por , o simplemente los 2 últimos dígitos de y = Y 100 do {\displaystyle y=Y-100c} Y {\estilo de visualización Y}
  • el {\estilo de visualización w} es el día de la semana (1 = domingo,..0 = sábado)
Tabla de desfases mensuales ( ) 2.6 ( metro + 1 ) {\displaystyle \lpiso 2.6(m+1)\rpiso }
MesesMarAbrPuedeJunJulAgoSepOctNovDicEneFeb
Compensar101315182023262831333639

La única diferencia es una entre el algoritmo de Zeller ( Z ) y el algoritmo gaussiano dispar ( G ), es decir ZG = 1 = domingo .

( d + ( metro + 1 ) 2.6 + y + y / 4 + do / 4 2 do ) modificación 7 ( d + 2.6 metro 0,2 + y + y / 4 + do / 4 2 do ) modificación 7 {\displaystyle (d+\lpiso (m+1)2,6\rpiso +y+\lpiso y/4\rpiso +\lpiso c/4\rpiso -2c){\bmod {7}}-(d+\lpiso 2,6m-0,2\rpiso +y+\lpiso y/4\rpiso +\lpiso c/4\rpiso -2c){\bmod {7}}}
= ( ( metro + 2 + 1 ) 2.6 ( 2.6 metro 0,2 ) ) modificación 7 {\displaystyle =(\lpiso (m+2+1)2,6-(2,6m-0,2)\rpiso ){\bmod {7}}} (Marzo = 3 en Z pero marzo = 1 en G )
= ( 2.6 metro + 7.8 2.6 metro + 0,2 ) modificación 7 {\displaystyle =(\lpiso 2,6m+7,8-2,6m+0,2\rpiso ){\bmod {7}}}
= 8 modificación 7 = 1 {\displaystyle =8{\bmod {7}}=1}

Algoritmo de Wang

El algoritmo de Wang [10] para el cálculo humano del calendario gregoriano es (la fórmula debe restarse en 1 si m es 1 o 2 si el año es bisiesto) donde
el = ( d d 0 ( metro ) + y 0 y 1 + y 0 / 4 y 1 / 2 2 ( do modificación 4 ) ) modificación 7 , {\displaystyle w=\left(d-d_{0}(m)+y_{0}-y_{1}+\left\lfloor y_{0}/4-y_{1}/2\right\rfloor -2\left(c{\bmod {4}}\right)\right){\bmod {7}},}

  • ⁠ ⁠ y 0 {\displaystyle y_{0}} es el último dígito del año ( unidades)
  • ⁠ ⁠ y 1 estilo de visualización y_{1} es el segundo último dígito del año ( decenas )
  • ⁠ ⁠ do {\estilo de visualización c} es el siglo, dado por do = año / 100 {\displaystyle c=\lfloor {\textit {año}}/100\rfloor }
  • ⁠ ⁠ d {\estilo de visualización d} es el día del mes (1 al 31)
  • ⁠ ⁠ metro {\estilo de visualización m} es el mes (enero=1,...,diciembre=12)
  • ⁠ ⁠ el {\estilo de visualización w} es el día de la semana (0=domingo,...,6=sábado)
  • ⁠ ⁠ d 0 ( metro ) estilo de visualización d_{0}(m)} es la función de días nulos (desplazamiento mensual) con valores que se enumeran en la siguiente tabla
metro⁠ ⁠ d 0 ( metro ) estilo de visualización d_{0}(m)}
11Un día
35m +2
57
79
93m +1
1112
212m +3
42m -2
64
86
108
1210

Se puede derivar un algoritmo para el calendario juliano a partir del algoritmo anterior, donde es un día del juicio final. el = ( d d 0 ( metro ) + y 0 y 1 + y 0 / 4 y 1 / 2 do ) modificación 7 , {\displaystyle w=\left(d-d_{0}(m)+y_{0}-y_{1}+\left\lfloor y_{0}/4-y_{1}/2\right\rfloor -c\right){\bmod {7}},} d 0 ( metro ) estilo de visualización d_{0}(m)}

metro⁠ ⁠ d 0 ( metro ) estilo de visualización d_{0}(m)}
13Día C
37m +4
59
711
95m -4
117
20m -2
44metro
66
88
1010
1212

Otros algoritmos

El método de Schwerdtfeger

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 ,

do = y 100 y gramo = y 100 do , {\displaystyle c=\left\lfloor {\frac {y}{100}}\right\rfloor \quad {\text{y}}\quad g=y-100c,}

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

do = y 1 100 y gramo = y 1 100 do . {\displaystyle c=\left\lfloor {\frac {y-1}{100}}\right\rfloor \quad {\text{y}}\quad g=y-1-100c.}

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

el = ( d + mi + F + gramo + gramo 4 ) modificación 7 , {\displaystyle w=\left(d+e+f+g+\left\lfloor {\frac {g}{4}}\right\rfloor \right){\bmod {7}},}

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

El valor de e se obtiene de la siguiente tabla:

metro123456789101112
mi032503514624

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

c módulo 40123
F0531

Para el calendario juliano, [6]

c módulo 70123456
F5432106

El método de Lewis Carroll

Charles Lutwidge Dodgson ( Lewis Carroll ) ideó un método parecido a un rompecabezas, aunque parcialmente tabular al utilizar 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 7 veces más alto para el último, y da instrucciones crípticas para encontrar el resto; sus ajustes para los siglos se deben determinar utilizando fórmulas similares a las de la tabla de siglos. Aunque es explícito al afirmar que su método también funciona para las fechas del estilo antiguo , su ejemplo reproducido 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 en el calendario juliano de "estilo antiguo" .

Algoritmo: [11]

Tome la fecha dada en cuatro partes, a saber: el número de siglos, el número de años transcurridos, el mes y el día del mes.

Calcule los 4 elementos siguientes y, cuando los encuentre, añada cada uno al total de los elementos anteriores. Cuando un elemento o total sea mayor que 7, divida por 7 y conserve solo el resto.

Partida del siglo: Para el ' Estilo antiguo ' (que terminó el 2 de septiembre de 1752) restar de 18. Para el ' Estilo nuevo ' (que comenzó el 14 de septiembre de 1752) dividir por 4, tomar el sobrante más [excedente] de 3, multiplicar el resto por 2.

Año-artículo: Sume el número de docenas, el sobrante y el número de 4 en el sobrante.

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

Día-elemento: El total así obtenido debe corregirse, deduciendo "1" (sumando primero 7, si el total es "0"), si la fecha es enero o febrero de un año bisiesto, recordando que todo año divisible por 4 es bisiesto, exceptuando únicamente los años-siglos, 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, siendo “0” el domingo, “1” el lunes, y así sucesivamente.

Ejemplos: [11]

1783, 18 de septiembre

17, dividido por 4, deja "1" de más; 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 por 7) "5". Total 9, es decir "2" El artículo para agosto es "8 de 10", es decir "2"; por lo tanto, para septiembre, es "2 más 31", es decir "5" Total 7, es decir "0", que sale. 18 da "4". Respuesta: "Jueves".

1676, 23 de febrero

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

Las fechas anteriores a 1752 se darían en Inglaterra según el calendario antiguo , con el 25 de marzo como primer día del nuevo año . Sin embargo, el método de Carroll supone que el 1 de enero es el primer día del año, por lo que no llega a la respuesta correcta, es decir, "viernes".

Si hubiera notado que el 23 de febrero de 1676 (con el 25 de marzo como día de Año Nuevo) es en realidad el 23 de febrero de 1677 (con el 1 de enero como día de Año Nuevo), habría tenido en cuenta los diferentes números de año (al igual que el cumpleaños de George Washington ) entre los dos calendarios. Entonces su método arroja:

1677 (corregido), 23 de febrero

16 de 18 da "2" 77 son 6 docenas y 5, lo que da 11; más 1 da 12, es decir "5". Total "7" El artículo para febrero es "3". Total 10, es decir "3" 23 da "2". Total "5". Respuesta: "viernes".

Es digno de destacar que aquellos que han republicado el método de Carroll no han señalado su error, más notablemente Martin Gardner . [12]

En 1752, el Imperio británico abandonó el uso del calendario juliano de estilo antiguo para adoptar el calendario gregoriano , que se ha convertido en el calendario estándar actual en la mayoría de los países del mundo. Para obtener más información, consulte Fechas de estilo antiguo y de estilo nuevo .

Métodos en código informático

Keith

En las expresiones del lenguaje Cy que aparecen a continuación , my dson, respectivamente, variables enteras que representan el año (por ejemplo, 1988), el mes (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 la cantidad de pulsaciones de teclas necesarias para ingresar una función autónoma para convertir una fecha gregoriana en un día numérico de la semana. [13] Devuelve 0= domingo, 1= lunes, etc. Esta expresión utiliza un componente de mes menos engorroso que el algoritmo de Zeller.

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

Los métodos de Sakamoto

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

dayofweek ( y , m , d ) /* 1 <= m <= 12, y > 1752 (en el Reino Unido) */ { 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 ; }                                           

Devuelve 0= domingo, 1= lunes, etc.

Sakamoto también publicó simultáneamente una versión más ofuscada:

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

Esta versión codifica los desplazamientos de los meses en la cadena y, como resultado, requiere una computadora que use ASCII estándar para ejecutar el algoritmo correctamente, lo que reduce su portabilidad . Además, ambos algoritmos omiten int las declaraciones de tipo , lo que está permitido en el C K&R original , pero no en el C ANSI .

(El algoritmo de Tøndering es, nuevamente, similar en estructura a la congruencia de Zeller y al código corto de Keith, excepto que el componente relacionado con el mes es 31*m/12. El de Sakamoto está en algún lugar entre el gaussiano dispar y el algoritmo de Schwerdtfeger, aparentemente sin tener en cuenta la forma de expresión).

El método de Gauss en MATLAB

% ejemplo de fecha de entrada y1 = 2022 ; m1 = 1 ; d1 = 1 ;      month_offset = [ 0 3 3 6 1 4 6 2 5 0 3 5 ]; % año común              % de desplazamiento si y1 es año bisiesto si mod ( y1 , 4 ) == 0 && mod ( y1 , 100 ) == 0 && mod ( y1 , 400 ) == 0 month_offset =[ 0 3 4 0 2 5 0 3 6 1 4 6 ]; % fin año bisiesto                  % Gregor día_semana_gregor = rem ( d1 + mes_desplazamiento ( m1 ) + 5 * rem ( y1 - 1 , 4 ) + 4 * rem ( y1 - 1 , 100 ) + 6 * rem ( y1 - 1 , 400 ), 7 )         % Día de la semana juliano_juliano = rem ( 6 + 5 * rem ( y1 - 1 , 4 ) + 3 * ( y1 - 1 ), 7 )    

0: Domingo 1: Lunes .. 6: Sábado

El método de Gauss para el calendario gregoriano en Python

desde  numpy  importa  resto  como  remdef  is_leap_year ( year :  int )  ->  bool : """ Determina si un año es bisiesto. """ return year % 4 == 0 and ( year % 100 != 0 or year % 400 == 0 )                    def  day_of_week ( y :  int ,  m :  int ,  d :  int )  -> str : ''' devuelve el día de la semana de la fecha dada como cadena,  usando el algoritmo de Gauss para encontrarlo ''' if is_leap_year ( y ): month_offset = ( 0 , 3 , 4 , 0 , 2 , 5 , 0 , 3 , 6 , 1 , 4 , 6 )[ m - 1 ] else : month_offset = ( 0 , 3 , 3 , 6 , 1 , 4 , 6 , 2 , 5 , 0 , 3 , 5 )[ m - 1 ] y -= 1 wd = int ( rem ( d + month_offset + 5 * rem ( y , 4 ) + 4 * rem ( y , 100 ) \ + 6 * rem ( y , 400 ) , 7 ))                                                              regresar  ( 'Dom' ,  'Lun' ,  'Mar' ,  'Mié' ,  'Jue' ,  'Vie' ,  'Sáb' )[ wd ]

Véase también

Referencias

Notas

  1. ^ Para ilustrar esto en detalle, es útil visualizar un calendario que represente un mes que comienza en domingo, es decir,  el 1.º del mes es domingo. Si contamos hacia adelante siete días, llegamos al 8, que también es domingo. Si contamos hacia adelante otros diez días, llegamos al 18, que es miércoles. Si, en cambio, comenzáramos el miércoles 4 (tres días después del domingo 1.º), contáramos hacia adelante siete días hasta el miércoles 11 (tres días después del domingo 8) y luego contáramos hacia adelante otros siete días, terminaríamos en el miércoles 18 , nuevamente , tres días después del domingo 15, que a su vez cae exactamente dos semanas (dos domingos) después del domingo 1.º.
  2. ^ Los números en la primera columna son prolépticos: el calendario gregoriano no se ideó hasta 1582. Véase la nota debajo de la tabla.
  3. ^ El siglo juliano que comienza en el año 1 a. C. también aparecería en esta línea de la tabla (a la izquierda de 700), pero no hay espacio para incluirlo.

Citas

  1. ^ ab Brothers, Hardin; Rawson, Tom ; Conn, Rex C .; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. (27 de febrero de 2002). Ayuda en línea de 4DOS 8.00 .
  2. ^ "HP Prime - Portal: Actualización de firmware" (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 .
  3. ^ Paul, Matías R. (30 de julio de 1997). NWDOS-TIP: consejos y trucos para Novell DOS 7, con un clic para deshacer detalles, errores y soluciones. Versión 157 (en alemán) (3ª ed.). Archivado desde el original el 4 de noviembre de 2016 . Consultado el 6 de agosto de 2014 .(NB. NWDOSTIP.TXTes un trabajo exhaustivo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características y componentes internos no documentados. Es parte de la MPDOSTIP.ZIPcolección aún más grande del autor, mantenida hasta 2001 y distribuida en muchos sitios en ese momento. El enlace provisto apunta a una versión anterior del NWDOSTIP.TXTarchivo convertida a HTML).
  4. ^ Richards, EG (1999). Mapeo del tiempo: el calendario y su historia . Oxford University Press . ISBN 978-0-19-850413-9.
  5. ^ ab Gauss, Carl F. (1981). "Den Wochentag des 1. Januar eines Jahres zu finden. Gueldene Zahl. Epakte. Ostergrenze". Trabajo. herausgegeben von der Koeniglichen Gesellschaft der Wissenschaften zu Goettingen (2ª ed.). Hildesheim: Georg Olms Verlag. págs. 206-207. ISBN 978-3-48704643-3.
  6. ^ abcdef Schwerdtfeger, Berndt E. (7 de mayo de 2010). "Fórmula del calendario de Gauss para el día de la semana" (PDF) (1.4.26 ed.) . Consultado el 23 de diciembre de 2012 .
  7. ^ Kraitchik, Maurice (1942). "Capítulo 5: El calendario". Recreaciones matemáticas (2.ª edición revisada [Dover]). Mineola: Dover Publications . pp. 109–116. ISBN 978-0-48645358-3.
  8. ^ Rosen, Kenneth H. (2011). Teoría elemental de números y sus aplicaciones . Addison Wesley. págs. 134-137. ISBN 978-0321500311.
  9. ^ Stockton, JR (19 de marzo de 2010). "Las obras calendáricas del rector Chr. Zeller: las fórmulas de los días de la semana y de Pascua". Merlyn . Archivado desde el original el 29 de julio de 2013 . Consultado el 19 de diciembre de 2012 .
  10. ^ Wang, Xiang-Sheng (marzo de 2015). "Cálculo del día de la semana: algoritmo de días nulos" (PDF) . Revista de Matemáticas Recreativas . N.º 3. pág. 5.
  11. ^ ab Dodgson, CL ( Lewis Carroll ). (1887). "Para encontrar el día de la semana para cualquier fecha dada". Nature , 31 de marzo de 1887. Reimpreso en Mapping Time , pp. 299-301.
  12. ^ Martin Gardner. (1996). El universo en un pañuelo: recreaciones matemáticas, juegos, rompecabezas y juegos de palabras de Lewis Carroll , páginas 24-26. Springer-Verlag.
  13. ^ Michael Keith; Tom Craver. (1990). ¿ El calendario perpetuo definitivo? Journal of Recreational Mathematics, 22:4, pp.280-282.
  14. ^ La calculadora de cuatro funciones; El ensamblaje de los huérfanos Motorola 68000; El ábaco. gopher://sdf.org/1/users/retroburrowers/TemporalRetrology
  15. ^ "¡SE NECESITA un algoritmo para determinar el día de la semana!" news:[email protected]
  16. ^ Espacio de trabajo APL2 IDIOMS: algoritmos de fecha y hora, línea 15. ftp://ftp.software.ibm.com/ps/products/apl2/info/APL2IDIOMS.pdf [ enlace muerto permanente ] (2002)
  17. ^ "Conversión de fecha -> día de la semana". Grupos de noticias de Google:comp.lang.c . Diciembre de 1992 . Consultado el 21 de junio de 2020 .
  18. ^ "Algoritmo DOW". Grupos de noticias de Google:comp.lang.c . 1994 . Consultado el 21 de junio de 2020 .

Lectura adicional

  • Hale-Evans, Ron (2006). "Hack #43: Calcular cualquier día de la semana" . Trucos para mejorar el rendimiento mental (1.ª ed.). Pekín: O'Reilly. pp. 164–169. ISBN 9780596101534.
  • Thioux, Marc; Stark, David E.; Klaiman, Cheryl; Schultz, Robert T. (2006). "El día de la semana en el que naciste en 700 ms: cálculo del calendario en un autista sabio". Revista de psicología experimental: percepción y rendimiento humanos . 32 (5): 1155–1168. doi :10.1037/0096-1523.32.5.1155. PMID  17002528.
  • Treffert, Darold A. (12 de octubre de 2011). "¿Por qué calcular con calendario?". Islas del genio: la mente generosa del autista, el sabio adquirido y el súbito (1.ª ed. publ., [repr.].). Londres: Jessica Kingsley. pp. 63–66. ISBN 9781849058735.
  • Algoritmo de Tøndering para los calendarios gregoriano y juliano
  • Se utiliza el método del "Día Clave" para reducir el cálculo y la memorización
  • Método tabular compacto para memorización, también para el calendario juliano
  • Cuando los países cambiaron el calendario juliano
  • Récords mundiales de cálculo mental del día de la semana en el calendario gregoriano
  • Récords nacionales para encontrar fechas del calendario
  • Fechas del Calendario Mental de la Clasificación Mundial de Memoriad (todas las competiciones combinadas)
  • Identifica el año por mes, día y día de la semana indicados. Archivado el 4 de enero de 2018 en Wayback Machine.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Determinación_del_día_de_la_semana&oldid=1244452524"