¿Cómo calcular el primer día de la próxima semana y el primer día del próximo mes obteniendo la hora actual?
En primer lugar, debe memorizar un "código de función". Esta cadena de códigos de función debe crearla usted mismo.
Método:
Tome este año (2005) como ejemplo. Abra el calendario y averigüe qué día de la semana es el 1 de enero. Enero 2005 El código de característica es (6-1=5) (El domingo es 7)
De la misma manera, busque el código de característica para cada mes de 12 meses y recuérdelo.
El código de característica de cada mes en 2005 es 511462403513 (de enero a diciembre)
Lo siguiente puede calcular el día de la semana para cualquier día de 2005
Por ejemplo, digamos que el 14 de junio, primero encuentra que el código de característica de junio es 2, luego agrega el código de característica 2 a la fecha 14 y divide la suma de 16 entre 7. El resto 2 es el día de la semana (martes )
En resumen, el método es (código de característica fecha del mes actual)/7, y el resto es el día de la semana.
Por supuesto, este método todavía es muy imperfecto. Necesita crear y recordar el código de característica de antemano, y solo puede calcular la fecha de un año determinado o de varios años (porque cada año tiene una característica). código para cada año, y hay más códigos de características en el año) Hay tantos que es difícil recordar). Por supuesto, existen otros métodos, por ejemplo, simplemente recuerde el código característico de enero de cada año y luego sume el número de días de cada mes para obtener el día del año en el que se encuentra la fecha que necesita. número de enero. La firma luego se divide por 7, y el resto también es el día de la semana para esa fecha. Sin embargo, este método de calcular el "número de días" es relativamente engorroso. Enero y febrero están bien, pero octubre y noviembre son muy complicados, lo que no favorece el cálculo mental, por lo que no es perfecto.
¿Cómo calcular qué día de la semana es un día determinado?
——Fórmula de Zeller
¿Qué día de la semana es un día determinado en la historia? ¿Qué día de la semana será en el futuro? Con respecto a este problema, existen muchas fórmulas de cálculo (dos fórmulas de cálculo generales y algunas fórmulas de cálculo por partes), la más famosa de las cuales es la fórmula de Zeller. Es decir, w=y [y/4] [c/4]-2c [26(m 1)/10] d-1
Los símbolos en la fórmula tienen los siguientes significados, w: semana ; c: siglo- 1; y: año (dos dígitos); m: mes (m es mayor o igual a 3, menor o igual a 14, es decir, en la fórmula de Zeiler, enero y febrero de un determinado año deben considerarse como el 13 y 14 del año anterior, por ejemplo, el 1 de enero de 2003 debe calcularse como el 1 de diciembre de 2002); d: día [ ] representa redondeo, es decir, solo se requiere la parte entera. (C es el siglo menos uno, y son los dos últimos dígitos del año, M es el mes y d es el día. Enero y febrero deben calcularse de acuerdo con los meses 13 y 14 del año anterior. En este momento , C e y se calculan como El valor es un año)
La W calculada se divide por 7 y el resto es el día de la semana. Si el resto es 0, es domingo.
Tome el 1 de octubre de 2049 (el centenario del Día Nacional) como ejemplo, use la fórmula de Zeller para calcular, el proceso es el siguiente:
Fórmula de Zeller: w = y [y/4] [c/4]-2c [26(m 1)/10] d-1
=49 [49/4] [20/4]-2×20 [ 26 × (10 1)/10] 1-1
=49 [12.25] 5-40 [28.6]
=49 12 5-40 28
=54 (dividido por 7, el resto es 5)
Es decir, el 1 de octubre de 2049 (el centenario del Día Nacional) es viernes.
¿Cuándo es tu cumpleaños (cuándo naciste, este año, el año que viene)? También podría intentarlo.
Sin embargo, la fórmula anterior solo es adecuada para la situación posterior al 15 de octubre de 1582 (el Papa en ese momento cambió el calendario juliano establecido por César el Grande al calendario gregoriano, que es el calendario gregoriano que se usa hoy). ).
Derivación del proceso: (Aquellos que no estén interesados en el razonamiento pueden omitirlo)
El sistema semanal es un sistema con tradiciones antiguas. Se dice que debido a que el "Génesis de la Biblia" estipula que Dios tomó seis días para crear el mundo y descansó el séptimo día, la gente también usa siete días como un ciclo para organizar su trabajo y su vida.
trabajo , y el domingo es día libre. Desde un punto de vista práctico, un ciclo de siete días es más apropiado. Entonces
Aunque el ciclo de trabajo tradicional de China es de diez días (por ejemplo, los "Diez Días de Descanso" mencionados en el "Prefacio del Pabellón Tengwang" de Wang Bo") significa que
se refiere al El trabajo del funcionario cada diez días (por ciclo, el décimo día libre), pero más tarde también adoptó el sistema de semana occidental.
En la vida diaria, muchas veces nos encontramos con el problema de saber en qué día de la semana es un día determinado. A veces, también queremos saber qué día de la semana fue un determinado día de la historia. Normalmente, la forma efectiva de solucionar este problema es mirar el calendario, pero nunca llevamos un calendario con nosotros en todo momento y mucho menos un calendario perpetuo que tiene miles de años de historia. Si desea calcular el día de la semana en programación informática, es aún menos realista guardar un calendario perpetuo con antelación. En este momento, ¿hay alguna manera de utilizar alguna fórmula para deducir el día de la semana del año, mes y día?
La respuesta es sí. De hecho, nosotros también hacemos esto a menudo. Comencemos con un ejemplo simple. Por ejemplo, si sabe
que el 1 de mayo de 2004 es sábado, entonces no es difícil calcular el día de la semana en el que el "Día Mundial Sin Tabaco" es el 31 de mayo de 2004.
p>
Podemos contar con los dedos del 1 al 31, y al mismo tiempo contar las semanas, y finalmente podemos contar que el 31 de mayo es lunes.
De hecho, al utilizar cálculos matemáticos, no es necesario romperse los dedos. Sabemos que la semana dura siete días, por lo que el 1 de mayo es sábado y siete días después, el 8 de mayo también es sábado. En términos de fechas, 8-1=7, que es múltiplo de 7. De manera similar, el 15 de mayo, 22 de mayo y 29 de mayo también son sábados, y las diferencias entre sus fechas y el 1 de mayo son 14, 21 y 28 respectivamente, además
Son todos múltiplos de 7. ¿Qué pasa con el 31 de mayo? 31-1=30 Aunque no es múltiplo de 7, cuando se divide 31 entre 7, el resto es 2.
Esto significa que la semana del 31 de mayo es dos días después de la semana de mayo. 1er cielo. Dos días después del sábado es lunes.
Este sencillo cálculo nos da una idea básica para calcular la semana: Primero, primero debemos saber el día de la semana que es un día determinado antes del día que queremos calcular.
Tomar este día como estándar para el cálculo, equivale a un cálculo
"origen". En segundo lugar, sepa cuántos días hay de diferencia entre el día que desea calcular y el día determinado. Divida la diferencia de esta fecha entre 7. El resto significa que la semana del día que desea calcular es posterior a la semana del determinado. día.cuantos dias. Si el resto es
0, significa que los dos días tienen el mismo día de la semana. Obviamente, si se selecciona el domingo como día de "origen", el resto será exactamente igual al día de la semana, lo que hará que el cálculo sea más conveniente.
Sin embargo, todavía resulta engorroso calcular directamente el número de días entre dos días. Por ejemplo, hay 7947 días entre el 29 de julio de 1982 y el 1 de mayo de 2004, que no se pueden calcular de una vez. Incluye tres períodos de tiempo: primero, los días restantes del año posterior al 29 de julio de 1982; segundo, el número total de días en los veintiún años completos desde 1983 a 2003; tercero, desde 2004; >El número de días desde el día de Año Nuevo hasta el 1 de mayo. El segundo párrafo es más fácil de calcular. Es igual a 21*365 5=7670 días. La razón por la que se agrega 5 es porque hay 5 años bisiestos durante este período.
El primer y tercer párrafo son más problemáticos. Por ejemplo, en el tercer párrafo, debe sumar el número de días de los cuatro meses anteriores a mayo más el valor de la fecha, es decir, 31 29 31 30 1 = 122 días. De la misma manera, el primer párrafo debe sumar el número de días de los cinco meses posteriores a julio, más el número de días restantes de julio, y un día son 155 días.
Entonces el número de días entre el total *** es 122 7670 155 = 7947 días.
Piénsalo bien, si se selecciona la fecha del "origen" como el 31 de diciembre, entonces el primer período de tiempo será un año completo.
De esta manera, el primer El primer período de tiempo y el segundo período de tiempo se pueden combinar y calcular, y el número total de todo el año es exactamente equivalente a la diferencia anual de los dos días menos uno. Si se selecciona además la fecha de "origen" como el 31 de diciembre del año 1 a. C. (o el 31 de diciembre del año 0 d. C. como lo utilizan los astrónomos), el número total para todo el año será exactamente lo que queremos. Disminuya el año del día calculado. uno. Después de esta simplificación, sólo te falta calcular dos periodos de tiempo: primero, el número total de días en tantos años enteros; segundo, ¿cuántos días en este año quieres contar? . Casualmente, según la configuración de año y mes del calendario gregoriano, si trabajamos hacia atrás de esta manera, el 31 de diciembre del año 1 a.C. resulta ser domingo. En otras palabras, el número total de días calculado de esta manera es el resto dividido por 7. . Exactamente qué día de la semana es. Así que la pregunta ahora es
Sólo una: ¿cuántos años bisiestos hay en tantos años enteros? Esto requiere comprender las reglas de salto del calendario gregoriano.
Sabemos que el calendario gregoriano tiene 365 días en los años ordinarios y 366 días en los años bisiestos. El método para establecer saltos es agregar un día en febrero para los años que son divisibles por 4.
Sin embargo, si el año es divisible por 100, no habrá salto. Si es divisible por 400, habrá un salto. Por lo tanto, años como 1600, 2000 y 2400 son años bisiestos, mientras que los años 1700, 1800, 1900 y 2100 son años ordinarios. El año 1 a. C. también es un año bisiesto según el calendario gregoriano.
Así, para todos los años bisiestos en todos los años
desde el 31 de diciembre del año 1 a.C. (o 0 d.C.) hasta una fecha determinada del año Y, es igual a
[(Y-1)/4] - [(Y-1)/100] [(Y-1)/400],
[...] Indica tomar solo la parte entera . El primer elemento indica que es necesario sumar el número de años divisible por 4, el segundo indica que es necesario eliminar el número de años divisible por 100 y el tercer elemento indica que es necesario sumar el número de años divisible por 400. agregado. La razón por la que Y necesita reducirse en uno es que
De esta forma obtenemos la primera fórmula para calcular el día de la semana en un día determinado:
W = ( Y-1)*365 [ (Y-1)/4] - [(Y-1)/100] [(Y-1)/400] D. (1)
Donde D es el número acumulado de días de este día en este año. La W calculada es el número de días entre el 31 de diciembre del año 1 a.C. (o 0 d.C.) y este día. Divida W entre 7, cuál es el resto y este día es el día de la semana. Por ejemplo,
calculemos el 1 de mayo de 2004:
W = (2004-1)*365 [(2004-1)/4] - [(2004-1) / 100] [(2004-1)/400]
(31 29 31 30 1)
= 731702,
731702 / 7 = 104528…… 6 , el resto son seis, lo que indica que este día es sábado. Esto es consistente con los hechos.
Aunque la fórmula anterior (1) es muy precisa, el número calculado es demasiado grande y su uso es muy incómodo. Si lo piensas detenidamente, de hecho, la cantidad de días W se usa solo para obtener el resto después de dividirlo por 7.
Esto nos inspira a
¿Podemos simplificar este valor de W? Solo necesitamos encontrar un número más pequeño que sea igual a su resto en términos de teoría de números
es decir, encontrar A. Un entero positivo más pequeño que sea congruente con él aún puede calcular el número exacto de semanas.
Obviamente, la razón por la cual W es tan grande es porque el primer término (Y-1)*365 en la fórmula es demasiado grande. De hecho,
(Y-1)*365 = (Y-1) * (364 1)
= (Y-1) * (7*52 1) p >
= 52 * (Y-1) * 7 (Y-1),
El primer término de este resultado es múltiplo de 7, y el resto al dividirlo entre 7 es 0, entonces (Y- 1) El resto de *365 dividido por 7 es en realidad igual al resto de Y-1 dividido por 7. Esta relación se puede expresar como:
(Y-1)*365 ≡ Y-1 (mod 7).
Entre ellos, ≡ es el símbolo que indica congruencia en la teoría de números Mod 7 significa que cuando se usa 7 como módulo (es decir, el divisor),
ambos lados del. signo ≡ Los números son congruentes. Por tanto, (Y-1) se puede utilizar para sustituir (Y-1)*365, de modo que obtenemos la famosa y más común fórmula para calcular el día de la semana:
W = (Y- 1) [(Y-1)/4] - [(Y-1)/100] [(Y-1)/400] D. (2)
Aunque esta fórmula es mucho más fácil de usar, no es la fórmula más útil porque el cálculo del número acumulado de días D también es problemático
¿Se puede calcular directamente utilizando el número de mes y la fecha? La respuesta también es sí. También podríamos observar el número de días de cada
mes, la lista es la siguiente:
Meses: enero, febrero, marzo, abril, mayo, junio, julio, agosto , Septiembre, Octubre Noviembre Diciembre
------------------------------------- ----- ----------------------------------
Número de días: 31 28(29) 31 30 31 30 31 31 30 31 30 31
Si restas 28 (=4*7) de este número de días, no afectará el valor restante de W dividido por 7 . De esta forma obtenemos otra tabla:
Mes: enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviembre, diciembre
--- ------------------------------------------ -------- --------------------
Número de días restantes: 3 0(1) 3 2 3 2 3 3 2 3 2 3
Acumulación de años normales: 3 3 6 8 11 13 16 19 21 24 26 29
Acumulación de años bisiestos: 3 4 7 9 12 14 17 20 22 25 27 30
Si miras de cerca, encontraremos que excluyendo enero y febrero, los días restantes en los cinco meses de marzo a julio son 3, 2, 3, 2,
3; de enero a diciembre también son 3, 2, 3, 2, 3, que es exactamente una repetición. Entre los días acumulados correspondientes,
La diferencia entre los días acumulados del mes siguiente y los días acumulados del mes anterior menos 28 es esta repetición.
Precisamente por la existencia de esta regla, el número acumulado de días en años ordinarios y bisiestos se puede expresar fácilmente mediante fórmulas matemáticas:
╭ d (cuando M=1)
D = { 31 d; (cuando M=2) (3)
╰ [ 13 * (M 1) / 5 ] - 7 (M-1) * 28 d i. (Cuando M≥3)
Donde [...] todavía significa tomar solo la parte entera; M y d son el mes y el día que desea calcular respectivamente i=0; y años bisiestos
i=1. Es necesario explicar la expresión M≥3: [13*(M 1)/5]-7 se calcula a partir del valor acumulado anual promedio en la segunda tabla anterior, más (M -1)*28 es el número total de días en todos los meses anteriores al mes que desea contar. Esta es una forma muy inteligente de utilizar operaciones de redondeo para lograr un ciclo de 3, 2, 3, 2, 3. Por ejemplo, para el 1 de mayo de 2004, hay:
D = [ 13 * (5 1) / 5 ] - 7 (5-1) * 28 1 1
= 122,
Este es el número acumulado de días desde el 1 de mayo de 2004.
Si hacemos otro cambio y consideramos enero y febrero como el "13" y "14" del año anterior, no sólo seguirá
cumpliendo con esta fórmula, sino también porque de esto, el día bisiesto se convierte en el último día del "año" anterior (hay 14 meses en un año) y pasa a formar parte de d, por lo que el impacto del año bisiesto también se elimina, la fórmula se simplifica a: <. /p>
D = [ 13 * (M 1) / 5 ] - 7 (M-1) * 28 d. (3≤M≤14) (4)
La fórmula anterior para calcular los días de la semana se puede simplificar aún más a:
W = (Y-1) [(Y -1 )/4] - [(Y-1)/100] [(Y-1)/400] [ 13 * (M 1) / 5 ] - 7
(M-1) * 28 días .
Debido a que los dos elementos -7 y (M-1)*28 son divisibles por 7, si se eliminan estos dos elementos, el resto después de dividir W por 7 permanece sin cambios.
La fórmula queda:
W = (Y-1) [(Y-1)/4] - [(Y-1)/100] [(Y-1)/400] [ 13 * ( M 1) / 5 ] d.
(5)
Por supuesto, cabe señalar que enero y febrero se han considerado como los meses 13 y 14 del año anterior, por lo que al calcular los días de enero y febrero
Además de que M se cuenta como 13 o 14, al año Y también se le resta uno. Por ejemplo, el 1 de enero de 2004 es jueves. Utilice esta fórmula para calcular:
W = (2003-1) [(2003-1)/4] - [(2003-1)/100]. [(2003-1)/400] [13*(13 1)/5]
1
= 2002 500 - 20 5 36 1
= 2524;
2524/7 = 360……4. Esto es consistente con la realidad.
La fórmula (5) ya es una fórmula para calcular el día de la semana a partir del año, mes y día, pero no es la más concisa y hay margen de mejora en el procesamiento de la método del año
.
Primero usemos esta fórmula para calcular la semana del 1 de marzo del primer año de cada siglo. La lista es la siguiente:
Año: 1 (401, 801,..., 2001) 101(501,901). ,…,2101)
--------------------------------- ----- -----------------------
Semana: 4 2
=== ============================================== ===== ================
Año: 201 (601, 1001,…, 2201) 301 (701, 1101,…, 2301)
------------------------------------------------ --------------------------
Semana: 0 5
Se puede observar que cada Cuatro Siglo, se repetirá esta semana. Si consideramos 301 (701, 1101,..., 2301)
El número de semana del 1 de marzo del año es -2 (según la definición de resto en teoría de números, -2 y 5 divididos por 7 Los restos son iguales, por lo que se puede hacer esta transformación), entonces esta secuencia repetida es exactamente una secuencia aritmética de 4, 2, 0, -2. En base a esto,
podemos obtener la siguiente fórmula para calcular el día de la semana del 1 de marzo del primer año de cada siglo:
W = (4 - C mod 4 ) * 2 - 4. (6)
En la fórmula, C es el número del siglo menos uno, y mod representa la operación de módulo, es decir, encontrar el resto. Por ejemplo, para marzo de 2001
1, C=20, entonces:
W = (4 - 20 mod 4) * 2 - 4
= 8 - 4
= 4.
Sustituyendo la fórmula (6) en la fórmula (5), después de la transformación, podemos obtener:
(Y-1) [(Y-1)/4] - [(Y - 1)/100] [(Y-1)/400] ≡ (4 - C mod 4) * 2 - 1
(mod 7). (7)
Por lo tanto, (Y-1) [(Y-1)/4] - [(Y-1)/100] [(Y-1)/400 en la fórmula (5) ] Estos cuatro elementos pueden sustituirse por (4 - C mod 4) * 2 - 1 al calcular el día del primer año de cada siglo. Esta fórmula se escribe como:
W = (4 - C mod 4) * 2 - 1 [13 * (M 1) / 5] d. (8)
Con la fórmula para calcular la fecha y semana del primer año de cada siglo, la fórmula para calcular la fecha y semana de los demás años del siglo es fácil de obtener.
Porque en un siglo, el año que termina en 00 es el último año, por lo que no es necesario considerar la regla de "sin saltos en cien años y saltos en cuatrocientos años". cuatro saltos". Regla del "año bisiesto". Siguiendo el método de simplificar la fórmula (1)
en la fórmula (2), podemos obtener fácilmente un cálculo más simple de la fórmula (8) que de la fórmula (5)
La fórmula del día de la semana:
S = (4 - C mod 4) * 2 - 1 (y-1) [y/4] [13 * (M 1) / 5] d. (9)
En la fórmula, y son los dos últimos dígitos del año.
Si consideramos que la operación de módulo no son las cuatro operaciones aritméticas, podemos reescribir (4 - C mod 4) * 2 en una expresión que contenga solo las cuatro operaciones aritméticas. Porque existe la siguiente relación entre el cociente q y el resto r del siglo menos un C dividido por 4:
4q r = C,
donde r es C mod 4, por lo tanto, existen:
r = C - 4q
= C - 4 * [C/4]. (10)
Entonces
(4 - C mod 4) * 2 = (4 - C 4 * [C/4]) * 2
= 8 - 2C 8 * [C/4]
≡ [C/4] - 2C 1 (mod 7). (11)
Sustituyendo la ecuación (11) en (9), obtenemos:
W = [C/4] - 2C y [y/4] [13 * (M 1 ) / 5] d - 1. (12)
Esta fórmula puede calcular W restando uno al siglo, los dos últimos dígitos del año, el mes y el día, y luego dividirlo entre 7. ¿Cuál es el resto?
p>
Este día es el día de la semana. El único cambio que es necesario realizar es tratar enero y febrero como los meses 13 y 14 del año anterior.
C e y son. ambos valorados según el año del año anterior. Por lo tanto, generalmente se considera la mejor fórmula para calcular el día de la semana para un día determinado. Esta fórmula fue deducida por primera vez por el matemático alemán Christian Zeller (1822-
1899) en 1886, por lo que se la conoce comúnmente como fórmula de Zeller. Para facilitar el cálculo oral,
[13 * (M 1) / 5] en la fórmula a menudo se escribe como [26 * (M 1) / 10].
Ahora calculemos todavía la semana del 1 de mayo de 2004. Obviamente C=20, y=4, M=5, d=1, sustituimos en la fórmula de Zeiler
, hay son:
W = [20/4] - 40 4 1 [13 * (5 1) / 5] 1 - 1
= -15.
Tenga en cuenta que el resto de un número negativo no se puede calcular según el concepto habitual de resto, sino que sólo se puede calcular según la definición de resto en la teoría de números. Para facilitar el cálculo, podemos sumarle un múltiplo entero de 7 para convertirlo en un número positivo, como sumar 70 para obtener 55.
Divídelo entre 7 y el resto es 6, lo que indica que este día es sábado. Esto es consistente con la realidad y consistente con el resultado calculado por la fórmula (2)
.
Finalmente, cabe señalar que las fórmulas anteriores se basan todas en las reglas de salto del calendario gregoriano.
Para el calendario juliano, Zeiler también derivó la fórmula correspondiente:
W = 5 - C y [y/4] [13 * (M 1) / 5] d - 1. (13)
De esta manera, por fin solucionamos de una vez por todas el problema de calcular el día de la semana para cualquier día sin consultar el calendario.