Calendario almanaque
{
int Fuente
int SolarYear
int SolarMonth
int SolarDate
Período del calendario lunar;
Período mensual;
Período mensual;
int Weekday
int Kan
int Chih
};
unsigned _ _ int 64m _ ui 64 solarterms【24】;
unsigned _ _ int 64m _ ui 64 meses días【13】;
m _ ui64 días del mes【0】= 0ui 64
m _ ui 64 días del mes【1】= 31ui 64; > m_ui 64 días del mes【2】= 28ui 64;
m_ui 64 días del mes【3】= 31ui 64;
m_ui 64 días del mes【4】= 30ui 64
p>
m _ ui 64 días del mes [5] = 31ui 64;
m _ ui 64 días del mes [6] = 30ui 64; 7】= 31ui 64;
m_ui 64 días del mes【8】= 31ui 64;
m_ui 64 días del mes【9】= 30ui 64; _ ui64 días del mes【10】= 31ui 64;
m _ ui 64 días del mes【11】= 30ui 64;
m_ui 64 solarterms【0】= 0ui 64
m_ui 64 solarterms【1】= 21208 ui 64; terminos solares【2】= 42467 ui 64;
m _ ui 64 términos solares【3】= 63836 ui 64;
m _ ui 64 solarterms【5】= 107014ui 64
m _ ui 64 solarterms【6】= 128867 ui 64;
m _ ui 64 solarterms 【7】= 150921ui 64;
m_ui 64 términos solares【8】= 173149 ui 64;
m_ui 64 términos solares 【9】= 195551ui 64;
m _ ui 64 términos solares【10】= 218072 ui 64
m _ ui 64 términos solares【11】= 240693 ui 64
m _ ui 64 términos solares【12; 】= 263343 interfaz de usuario 64;
m _ interfaz de usuario 64
terminos solares【13】= 285989 ui 64;
m _ ui 64 términos solares【14】= 308563 ui 64; /p>
m _ ui 64 términos solares【16】= 353350 ui 64;
m _ ui 64 términos solares【17】= 375494 ui 64; terminos solares【18】= 397447 ui 64;
m _ ui 64 términos solares【19】= 419210ui 64
m _ ui 64 términos solares【20】= 440795 ui 64; p>p>
m_ui 64 solarterms【21】= 462224 ui 64;
m_ui 64 solarterms【22】= 483532 ui 64; 64 solarterms 【23】= 504758 ui 64;
/*Cálculo de veinticuatro términos solares*/
int _ _ fastcall es año bisiesto (int iYear)
{
if ((iYear amp; 3) != 0)
{
Devuelve 0;
} p>
si no (iAño 100! = 0)
{
Devuelve 1;
}
si no ( iAño 400 = = 0)
{
Devolución 1;
}
Otros
{ p>
Devuelve 0;
}
}
int _ _ fastcall TheSolarTerm(int iYear, int n)
{ p>
unsigned _ _ int 64k;
unsigned _ _ int 64 ddate _ utc = 22085493000000 ui 64;
unsigned __int64 doffdate, dadddate
fecha de salida = m _ ui 64 solarterms [n] * 600000 ui 64;
fecha de salida = static _ cast lt; _ int64 gt (iYear-1900) * 315569259747 ui
doffdate-= ddate_utc;
fecha doff/= 864000000 ui 64; //86400: 60 * 60 * 24 * 1000
int I = 1969;
p>dadddate = 0ui64
mientras(dadddate lt; dadddate)
{
i;
k = dadddate
dadddate = 365 ui 64 static _ cast lt; unsigned _ _ int64 gt(IsLeapYear(I));
};
if (dadddate gt; dadddate)
{
int j = 0;
dadddate = k ;
mientras (dadddate lt; dadddate amp ampj lt12)
{
j ;
k = dadddate
dadddate = m _ ui 64 días del mes【j】;
if (j == 2 amp; amp (IsLeapYear(I)!= 0))
{< /p >
dadddate;
}
};
return static_cast ltint gt(dadd date -k 1ui 64);
}
else // j = fecha de salida
{
devuelve 1;
}
} p>
int CalConv(struct ConvDate amp; disc)
{
int jump, d, sm, y, im, l1, l2, acc, I,lm, KC;
if (cd.source == 0) /* Solar */
{
if (cd.SolarYear lt=ésimo año || cd . SolarYear gt el año pasado)
{
devuelve 1;
}
sm = cd. mes solar-1;
if (sm lt; 0 | | sm gt11)
{
retorno 2;
}
salto = obtener salto (CD. año solar);
d = (sm = = 1)? (Salto 28): solar cal【sm】;
If (cd. SolarDate lt1 || cd. SolarDate gtd)
{
Return 3; /p>
}
y = cd. Solar - primer año;
ACC = días solares [salto] [sm] CD. FechaSolar
CD. día laborable = (ACC lunar cal[y]. día laborable base) 7;
KC = ACC lunar cal[y]. BaseKanChih
CD. Kan = KC 10;
CD. chih = KC 12;
if (ACC lt; = cal lunar[y]. Fecha base)
{
y-;
CD. Año Lunar = cd. año solar-1;
salto = obtener salto (CD. año lunar);
sm = 12
ACC = días solares [salto] [sm; ] CD. SolarDate
}
Otro
{
CD. Año Lunar = cd. AñoSolar
}
l 1 = cal[y] lunar.
Día base;
for(I = 0;i lt13;i)
{
L2 = l 1 cal[y] lunar. mes días【I】29;
if (ACC lt; = l2)
{
Descanso;
}
l 1 = L2;
}
CD. mes lunar = I 1;
CD. fecha lunar = ACC-l 1;
im = cal[y] lunar. intercalación;
if (im!= 0 amp amp disc.crescent gtim)
{
disc. mes lunar-;
if (cd. LunarMonth == im)
{
CD. mes lunar = -im;
}
}
if (cd. luna nueva gt12)
{
CD. mes lunar-= 12;
}
}
else /* Lunar */
{
if (cd. LunarYear lt primer año || cd. LunarYear gt = año pasado)
{
return 1;
}
y = cd. Año Nuevo Lunar - el primer año;
im = cal lunar[y]. intercalación;
lm = cd. Mes Lunar
if (lm lt; 0)
{
if (lm != -im)
{
Devolver 2;
}
}
si no (lm lt; 1 | | lm gt; 12)
{
Devuelve 2;
}
Si (¡estoy! = 0)
{
si ( lm gt;im)
{
lm;
}
si no (lm = =-im)
{
lm = soy 1;
}
}
lm-;
si (cd. LunarDate gtlunar cal [y] número de días en el mes [lm] 29)
{
Return 3;
}
ACC = cal lunar【y】. día base;
for(I = 0; i ltlm; i )
{
ACC = cal lunar[y]. mes días【I】29;
}
acc = cd. LunarDate
salto = get salto(CD. año lunar);
for(i = 13; i = 0; i -)
{ p >
if (ACC gt; SolarDays [salto] [I])
{
Descanso
}
}
CD. fecha solar = ACC-días solares[salto][I];
If (i lt= 11)
{
CD.
AñoSolar = cd. Año Lunar
CD. mes solar = I 1;
}
Otro
{
CD. AñoSolar = cd. año lunar 1;
CD. mes solar = I-11;
}
salto = obtener salto (CD. año solar); Solar - primer año;
ACC = días solares[salto][CD. mes solar-1] CD. FechaSolar
CD. día laborable = (ACC lunar cal[y]. día laborable base) 7;
KC = ACC lunar cal[y]. BaseKanChih
CD. Kan = KC 10;
CD. chih = KC 12;
}
Devuelve 0;
}