Red de conocimientos turísticos - Lugares de interés turístico - Cómo convertir el calendario gregoriano al calendario lunar en c

Cómo convertir el calendario gregoriano al calendario lunar en c

Primero, artículo original

1. Algoritmo para convertir el calendario gregoriano a calendario lunar

La conversión entre el calendario gregoriano y el calendario lunar chino no se puede completar con una fórmula simple. La conversión es más complicada. Porque la fórmula del calendario lunar es bastante compleja y se determina en función de observaciones astronómicas.

Un algoritmo común y simple para convertir el calendario gregoriano al calendario lunar es el método de la tabla de consulta. Primero, necesitamos guardar la información de conversión del calendario gregoriano y el calendario lunar: tomando cualquier año como punto de partida, guarde la información del calendario lunar para los años que comienzan a partir de este año (en mi clase C, comienza en 1900). La idea de elegir un punto de partida es muy importante, lo que también se refleja en las disciplinas y veinticuatro términos solares a continuación. Piense en retrospectiva, ¿cómo solemos convertir el calendario gregoriano al calendario lunar? Es una referencia al almanaque, que contiene los calendarios solar y lunar de cada día. Solo compruébalo directamente. Entonces, ¿podemos hacer lo mismo? Claro, pero requiere mucho trabajo incluir información diaria, por lo que deberíamos simplificarla. ¿Cómo simplificar?

Para guardar la información de un año, en realidad sólo se necesitan dos datos: (1) el tamaño de cada mes en el calendario lunar; (2) si hay un mes bisiesto este año, el mes de el mes bisiesto y el tamaño del mes bisiesto. Basta con utilizar un número entero para almacenar esta información. El método específico es usar un dígito para representar el tamaño de un mes. El mes grande es 1 y el mes pequeño es 0. De esta manera, se usan 12 dígitos y luego los cuatro dígitos inferiores se usan para representar el mes bisiesto. Si no hay mes bisiesto, es 0. Por ejemplo, los datos de información de 2000 son 0x0c960, que convertidos a binario son 1100101100000, que son 1, 2, 5, 8, 65400. Los datos de información del calendario lunar de 2001 son 0x0d954, donde 4 representa el abril bisiesto de ese año. y la información del tamaño del mes es 0x0d95, específicamente 1, 2, 4, 5, 8, 10 y 12 meses de edad, y los meses restantes son meses pequeños. De esta forma, se pueden utilizar matrices para almacenar esta información. En mi clase C utilizo la matriz m_lunarInfo para almacenar esta información.

El siguiente es el algoritmo específico para convertir el calendario gregoriano al calendario lunar:

(1) Calcule el número de días desde el tiempo requerido hasta el primer día del primer mes. del año de inicio.

(2) A partir del inicio del año, resta el número de días de cada mes hasta que no queden más días en el mes siguiente. En este momento, ¿cuántos años se han restado del subíndice de m_lunarInfo? Agregue este subíndice al año inicial para obtener el año lunar y luego vea cuántos meses se restan. Si no hay un mes bisiesto este año o el mes bisiesto aún está atrasado, puede obtener el mes lunar directamente. Si es un mes después de un mes bisiesto, este mes es un mes bisiesto. Los días restantes son días lunares. (Se ha mejorado la implementación específica).

2. La fórmula de Taylor ayuda a calcular el día de la semana de manera inteligente.

En matemáticas aplicadas, existe una fórmula para calcular el día de la semana. semana, que es la fórmula de Taylor. La fórmula es la siguiente: w = [c÷4]-2c y [y÷4] [26(m 1)÷10] d-1, donde w es el número de semana de la fecha solicitada. Si el número es mayor (menor que) 7, resta (suma) múltiplos de 7 hasta que el resto sea menor que 7. donde c se refiere a los dos primeros dígitos del año, y se refiere a los dos últimos dígitos, m se refiere al número de meses y d se refiere al número de días. Los corchetes [ ] indican que los números entre corchetes están redondeados. Hay otro punto que requiere especial atención: si el mes es enero o febrero, se debe considerar como 13 o 14 del año anterior, es decir, el rango de valores de m en la fórmula es de 3 a 14, no de 1. a 12.

3. Disciplina de cuadros y ramas

Hay diez tallos celestiales, a saber, A, B, C, D, E, Ji, Geng, Xin, humano y fantasma, y ​​allí Son diez ramas terrenales. Las dos son Zi, Chou, Yin, Mao, Chen, Si, Wu, Wei, Shen, You, Xu y Hai. Los antiguos los emparejaban en cierto orden sin repetición. Había sesenta pares desde Jiazi hasta Guihai, que se llamaban Sesenta Jiazi. Los antiguos chinos usaban estos 60 pares de ramas para representar los números de serie del año, mes, día y hora, y comenzaban una y otra vez. Esta es la cronología de los tallos y las ramas.

0 Jiazi

1 Chou b.

2 Bingyin

3 Dingmao

4 Chen Wu

5 Jijiji

6 Wu Geng

7 Wei Xin

8 Ren Shen

Guiyou No. 9 10 Xu Jia

11 Yihai

12 Bingzi

13 Ding Chou

14 Wuyin

15 Feria

16 Chen Geng

17 Xinji

18 casas

19 Shen Jiagui Wei 20

21 Yiyou

22 Xu Bing

23 Dinghai

24 Wuzi

25 Chou

26 Gengyin

27 Xinmao

28 Renchen

El día 29 , Guisi, el día 30, Wu Jia

31 B Wei

32 Shen Bing

33 Dingyou

34 Movimiento de Reforma

35 Jihai

36 Gengzi

37 Xin Chou

38 Renyin

39 Guimao 40 Chen Jia

41 B You

42 Wu Bing

43 Ding Wei

44 Wu Shen

p>

45 Ji You

46 Geng Xu

47 Xinhai

48 Renzi

49 Guichou 50 Jiayin

51 Mao Yi

52 Chen Bing

53 Butilo

54 Wuwu

55 años no

56 Gengshen

57 Xinyou

58 Ren Xu

Los principios para expresar los tallos y ramas del año, mes y día son los mismos, es decir, año, mes y día. número de años, meses y días desde el mes y día hasta el año, mes y día inicial, más los números de serie de tallo y rama del año, mes y día inicial en la tabla anterior. son módulo 10, y los números de serie del vástago y la rama son módulo 12. Tomando el año como ejemplo, el comienzo de la primavera después de 1900 es el año de Gengzi. Como se puede ver en la tabla anterior, el año Gengzi es el año 36 de la década de 1960, por lo que el número de años desde m_year hasta 1900 es m_year-1900 36-1 (si el mes es m_month, usando el mismo método, podemos obtener el mes y el día Finalmente, de acuerdo con el término solar (comienzo de primavera), debemos ajustar la representación mensual del tallo y la rama de acuerdo con la fecha del primer término solar del mes. La situación específica se detalla en el programa fuente <. /p>

Los antiguos dividían el día y la noche en doce horas según la hora en que salía el sol, y usaban las doce ramas terrestres como contraseña. Si se usa m_hour para representar la hora actual del calendario gregoriano (veinte). -cuatro notación), (m _ hora 1)/2 obtendrá la representación del tiempo de las ramas terrestres (en realidad, el número de serie de las ramas terrestres)

4 Veinticuatro términos solares

Esencialmente, los términos solares pertenecen al calendario solar. Desde el punto de vista astronómico, los veinticuatro términos solares se dividen en 24 partes iguales según los 360 grados de la órbita terrestre alrededor del sol (eclíptica), con el equinoccio de primavera como punto cero, y las dos partes iguales están separadas por 15 grados. Los veinticuatro términos solares tienen un nombre propio, que incluye el significado de cambio climático, características fenológicas y crecimiento de cultivos. Principio de otoño, final de verano, rocío blanco, equinoccio de otoño, rocío frío, primera helada, comienzo de invierno, nieve ligera, nieve intensa, solsticio de invierno, frío menor y frío mayor. En el orden anterior, todos los individuales son "términos solares". ", generalmente llamado "términos solares", el doble es "Zhong Qi", denominado "Qi", denominado colectivamente "términos solares".

Desde la antigüedad, el cálculo de los términos solares ha Los 24 términos solares iguales se calculan en el calendario antiguo dividiendo un año tropical en 24 partes iguales y ordenando los términos solares y los términos solares medios a intervalos iguales a partir del solsticio de invierno. El grado de movimiento del sol en el aire no es igual. El nuevo calendario se calcula mediante el método del aire constante, que divide el día de la eclíptica en 24 partes.

Cuando el sol se acerca a un determinado equinoccio de primavera, se establece como fecha de término solar. Como el movimiento aparente del Sol es desigual, los intervalos de tiempo entre los términos solares también lo son. Sin embargo, independientemente del calendario nuevo o antiguo, el solsticio de invierno es el primero de los veinticuatro qi, por lo que la diferencia entre ellos es mayor en los equinoccios de primavera y otoño. ¿Por qué los cronistas chinos tradicionales saben calcular Ding Qi, pero están acostumbrados a utilizar Ping Qi para registrar calendarios? Esto se debe principalmente a que el Qi plano es fácil de calcular, porque con este método, el intervalo entre cada término solar o entre Zhong Qi y Zhong Qi se fija en 30 días, 5 horas y 2 trimestres.

En esta clase C, se utiliza un algoritmo simple de términos solares planos para implementar el cálculo de 24 términos solares. La matriz sTermInfo se usa para registrar el número de minutos que cada término solar comienza desde Xiaohan en relación con Xiaohan, y la función int sTerm (int y, int n) se usa para obtener la fecha del mes en el que el enésimo término solar del Se ubica el año (n cuenta desde 0 Xiaohan). Debido a que no se tienen en cuenta la precesión y la nutación, la precisión no es muy alta.