¿Por qué Runnian tiene un mes extra en el calendario lunar y un día extra en el calendario solar?
Semana = [5+A (número real de días)] mod 7
2 Fórmula de cálculo de la rama principal
Número de sucursal de Liushijiazi = [23+A (número real de días)] mod 60
3. Veintiocho, fórmula de cálculo de alojamiento
28 serie de alojamiento. número = [23+A (número real de días)] mod 28
4. Cálculo del número real de días A
A=B (día base) + C (día bisiesto). )
p>B=(año calculado-1)*365+(número de días del mes, día y año a calcular)
Ejemplo: Número básico de días 1984 febrero 1 B =(1984-1) * 365+(31+1)= 723827 (días),
Entre ellos, 31 es 1 día de octubre y 1 es 1 día de febrero.
El número de día básico del 28 de agosto del 308 d.C.
b =(308-1)* 365+(31+28+31+331+27)= 110.
Aquí se utiliza el calendario gregoriano (para calcular el número de días de un mes a un año), y las reglas para el número de días de un mes son buenas
Al igual que lo que aprendí en la escuela primaria. Jajajajaja...
C=(año de cálculo-1)div 4-valor de corrección de error + valor fijo 2
El valor fijo 2 es 0 o 1. El valor constante es 0 y el año actual es marzo en un año bisiesto (método del año bisiesto gregoriano).
1 día después es 1.
Cálculo del valor de corrección de error:
La fecha del 65438+1 de octubre al 1582 65438+14 de octubre es 0.
1582 65438+15 de Octubre al 1699 65438+31 de Febrero son las 10.
A partir del 1 de enero de 1701, cada siglo sumará 1, pero los siglos divisibles por 400 no sumarán.
Suma 1. Este método se puede calcular.
-Hay una pregunta, ¿cuál debería ser el valor de corrección de 1700 este año? No hay nada en el algoritmo
Lo hay, pero parece ser 10.
Por ejemplo, el 1 de octubre de 1701, el valor de corrección de errores es del 12 de octubre de 1801,
Y el valor de corrección de errores del 1 de enero de 1901 es 13.
Pero el valor de corrección de error de 2001 sigue siendo 13, porque 2000 es divisible por 400, por lo que no suma. Sin embargo
El valor de corrección de error es el 1 de enero de 101.
5 Por ejemplo: semana 1998.3.15, sucursales y 28 casas de huéspedes
b =(1998-1)* 365+(31+28+15)= 728979 p> p>
c =(1998-1)div 4-13+0 = 486
A=B+C=728979+486=729465
Número de semanas = (5 +729465) mod 7=0, que es domingo.
El número de serie de la rama principal = (13+729465) mod 60 = 58, que es el resultado del corazón.
Número de serie del alojamiento veintiocho = (23+729465) mod 28=4, que es la habitación.
============================================ === ========
¡Qué terrible! Hay otras fórmulas... pero no sé cómo obtener algunos parámetros:
Algoritmo de veinticuatro términos solares:
El tiempo de entrega del año conocido más 22 horas y 35 minutos. Si excede 24, se resta 24 y la puntuación es 60.
Dentro de 1 hora, es decir, después de 8 años, se obtiene cada periodo de tiempo.
Por ejemplo, la temporada de lluvias en 2000 fue de 16:22 y la temporada de lluvias en 2008 fue de 14:52.
Puntos.
Porque 16:22+22:35 = 38:57 38-24 = 14.
Quién sabe si este algoritmo se podrá implementar para los festivales desde el primer año hasta el octavo año d.C.
-Muy bien
El algoritmo de inversión de imágenes puede solucionar este problema. ¿Quién lo intentará?
Algoritmo del mes bisiesto del calendario lunar:
Si el Qi medio de los veinticuatro términos solares (doce términos solares, doce Qi medios) del calendario lunar cae al final del mes, es Yin Qi.
No he sido neutral desde el mes pasado. El calendario lunar utiliza términos solares (términos solares) y Wu Qi (中气) como saltos para definir este mes.
Mes. Hay un promedio de 7 meses bisiestos en 19.
Pero ¿cómo se dividen los doce términos solares y los doce términos solares entre los veinticuatro términos solares? No tengo ninguna información.
Supongo que se debe al paso del término y la energía solar. :(
Unidad CNYear
Conexión
Uso sysutils
tipo TCNDate = Cardinal
Función decodeggtocndate(dt Greg:TDateTime):Fecha TCN;
Función
GetGregDateFromCN(cnYear, cnMonth, cn día:palabra; bLeap:Boolean=Fal
se):TDateTime ;
Función GregDateToCNStr(dt Greg:TDateTime):String;
función isCNLeap(cn date:TCN date):boolean;
Rendimiento
const cstDateOrg:Integer = 32900; //tcronograma de fecha del calendario gregoriano 1990-01-27
Corresponde al calendario lunar 1990-01-01
const cstcneyearorg = 1990;
const cstcnttable:array[cstcneyearorg..cstcneyearorg+60]of
WORD=( //16 bits sin firmar
24402, 3730, 3366, 13614 , 2647, 35542, 858, 1749, //1997
23401, 1865, 1683, 19099, 1323, 2651, 10926, 1386, //2005
32213, 2980, 2889 , 23891, 2709, 1325, 17757, 2741, //2013
39850, 1490, 3493, 61098, 3402, 3221, 19102, 1366, //2021
2773, 10970 , 1746, 26469, 1829, 1611, 22103, 3243, //2029
1370, 13678, 2902, 48978, 2898, 2853, 60715, 2635, //2037
1195 , 21179, 1453, 2922, 11690, 3474, 32421, 3365, //2045
2645, 55901, 1206, 1461, 14038);//2050
//Creación de tabla método:
//0101 110101010010 Los cuatro dígitos superiores son el mes bisiesto y los últimos 12 dígitos representan los meses grandes y pequeños. El mes grande es 30.
Días, 29 días para aborto espontáneo,
//El mes bisiesto generalmente se considera un mes pequeño, pero hay tres situaciones especiales: 2017/06, 2036/06, 2047/05.
//Para casos especiales, establezca el bit más alto de la posición del mes bisiesto de cuatro dígitos en 1 para un procesamiento especial.
Usa la variable wLeapNormal.
////2017/06 28330->;61098 2036/06 27947->;60715 2047/05
23133->;55901
/ /Si desea utilizar la compilación, aquí tiene un mensaje: el calendario lunar no se retrasará 2 meses con respecto al calendario solar.
//Convierte el calendario gregoriano al calendario lunar
//Retorno: año de 12 dígitos + mes de 4 dígitos + fecha de 5 dígitos.
Función decodeggtocndate(dt Greg:TDateTime):Fecha TCN;
Definir variables
iDayLeave:Integer;
wAño, wMes, wDay:WORD;
I, j: entero;
wBigSmallDist, wLeap, wCount, wLeapShift:WORD;
Etiquetar OK;
Inicio
Resultado:= 0;
iDayLeave:= Trunc(dt Greg)-cstDateOrg;
fecha de decodificación (en mes(dt Greg,-1 ), wAño, wMes, wDía);
si (día de licencia <0) o (iDayLeave>22295) entonces salga;
//Lanzar una excepción. Create('Actualmente solo se puede contar como 1990-01-27 ');
//Lanza una excepción. Crear ('Actualmente las estadísticas solo se pueden contar hasta el 11-02-2051');
para I:= Bajo(cstcnttable) a Alto(cstcnttable) inicio
wBigSmallDist:= cstcnttable [ I];
wLeap:= wBigSmallDist SHR 12;
Si wLeap & gt entonces comienza
wLeap:= wLeap AND 7;
wLeapShift:= 1;
Fin más
wLeapShift:= 0;
Para j:=1 a 12, comience
wCount:=(wBigSmallDist and 1)+29;
Si j=wLeap entonces w count:= w count-wLeapShift;
Si iDayLeave & lt entonces comienza a contar
p>Resultado:=(I SHL 9)+(j SHL 5)+vacaciones+1
Salir
Fin; licencia de día:= licencia de día-w cuenta;
Si j=wLeap, entonces comienza
wCount:= 29+wLeapShift;
Si iDayLeave & lt Entonces empezar a contar
Resultado:=(I SHL 9)+(j SHL 5)+vacaciones+1+(1 SHL 21);
Salir;
Fin;
vacaciones:= vacaciones-w cuenta;
Fin;
wBigSmallDist := wBigSm