📄 阴阳历算法.mht
字号:
45, 0, 6,=20
29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 }, =
<BR>{ 35,=20
0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 =
}, <BR>{=20
24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, =
1, 0 },=20
<BR>{ 43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, =
1, 1, 1,=20
0 }, /* 1964 */ <BR>{ 32, 0, 4, 50, 0, 1, 0, 1, =
0, 0, 1,=20
0, 0, 1, 1, 0, 1 }, <BR>{ 20, 3, 5, 55, 1, 1, 1, =
0, 1,=20
0, 0, 1, 0, 0, 1, 1, 0 }, <BR>{ 39, 0, 6, 0, 1, =
1, 0, 1,=20
1, 0, 0, 1, 0, 1, 0, 1, 0 }, <BR>{ 29, 7, 0, 5, =
0, 1, 0,=20
1, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, /* 1968 */ <BR>{ =
47, 0,=20
2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 }, =
<BR>{=20
36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, =
1, 0 },=20
<BR>{ 26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, =
1, 1, 0,=20
1 }, <BR>{ 45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, =
1, 1,=20
0, 1, 1 }, /* 1972 */ <BR>{ 33, 0, 0, 32, 1, 0, =
1, 0, 0,=20
1, 0, 0, 1, 1, 0, 1, 1 }, <BR>{ 22, 4, 1, 37, 1, =
1, 0,=20
1, 0, 0, 1, 0, 0, 1, 1, 0, 1 }, <BR>{ 41, 0, 2, =
42, 1,=20
1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 }, <BR>{ 30, =
8, 3,=20
47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }, /* =
1976 */=20
<BR>{ 48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, =
1, 0, 0,=20
1 }, <BR>{ 37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, =
1, 0,=20
1, 0, 1 }, <BR>{ 27, 6, 0, 3, 1, 0, 0, 1, 0, 1, =
1, 0, 1,=20
1, 0, 1, 0 }, <BR>{ 46, 0, 1, 8, 1, 0, 0, 1, 0, =
1, 0, 1,=20
1, 0, 1, 1, 0 }, /* 1980 */ <BR>{ 35, 0, 3, 14, =
0, 1, 0,=20
0, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, <BR>{ 24, 4, 4, =
19, 1,=20
0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 }, <BR>{ 43, =
0, 5,=20
24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 }, =
<BR>{ 32,=20
10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 =
}, /*=20
1984 */ <BR>{ 50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, =
0, 0,=20
1, 0, 1, 0 }, <BR>{ 39, 0, 2, 40, 0, 1, 1, 0, 1, =
1, 0,=20
1, 0, 1, 0, 0, 1 }, <BR>{ 28, 6, 3, 45, 1, 0, 1, =
0, 1,=20
1, 0, 1, 1, 0, 1, 0, 0 }, <BR>{ 47, 0, 4, 50, 1, =
0, 1,=20
0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, /* 1988 */ <BR>{ =
36, 0,=20
6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 }, =
<BR>{=20
26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, =
1 },=20
<BR>{ 45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, =
1, 1, 0=20
}, <BR>{ 34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, =
1, 0, 1,=20
1, 0 }, /* 1992 */ <BR>{ 22, 3, 4, 17, 0, 1, 1, =
0, 1, 0,=20
1, 0, 0, 1, 0, 1, 0 }, <BR>{ 40, 0, 5, 22, 1, 1, =
1, 0,=20
1, 0, 1, 0, 0, 1, 0, 1, 0 }, <BR>{ 30, 8, 6, 27, =
0, 1,=20
1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1 }, <BR>{ 49, 0, =
0, 32,=20
0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1 }, /* 1996 =
*/=20
<BR>{ 37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, =
1, 1, 0,=20
1 }, <BR>{ 27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, =
0, 1,=20
1, 0, 1 }, <BR>{ 46, 0, 4, 48, 1, 0, 0, 1, 0, 0, =
1, 0,=20
1, 1, 1, 0, 1 }, <BR>{ 35, 0, 5, 53, 1, 1, 0, 0, =
1, 0,=20
0, 1, 0, 1, 1, 0, 1 }, /* 2000 */ <BR>{ 23, 4, =
0, 59, 1,=20
1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, <BR>{ 42, =
0, 1, 4,=20
1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, <BR>{ =
31, 0, 2,=20
9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 }, =
<BR>{ 21, 2,=20
3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, =
/* 2004=20
*/ <BR>{ 39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, =
1, 0, 1,=20
0, 1 }, <BR>{ 28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, =
0, 1,=20
1, 0, 1, 1 }, <BR>{ 48, 0, 0, 30, 0, 0, 1, 0, 0, =
1, 0,=20
1, 1, 1, 0, 1, 1 }, <BR>{ 37, 0, 1, 35, 1, 0, 0, =
1, 0,=20
0, 1, 0, 1, 1, 0, 1, 1 }, /* 2008 */ <BR>{ 25, =
5, 3, 41,=20
1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }, <BR>{ =
44, 0, 4,=20
46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }, =
<BR>{ 33,=20
0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 =
}, <BR>{=20
22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, =
1, 0 },=20
/* 2012 */ <BR>{ 40, 0, 1, 2, 1, 0, 1, 1, 0, 1, =
0, 1, 0,=20
1, 0, 1, 0 }, <BR>{ 30, 9, 2, 7, 0, 1, 0, 1, 0, =
1, 0, 1,=20
1, 0, 1, 0, 1 }, <BR>{ 49, 0, 3, 12, 0, 1, 0, 0, =
1, 0,=20
1, 1, 1, 0, 1, 0, 1 }, <BR>{ 38, 0, 4, 17, 1, 0, =
1, 0,=20
0, 1, 0, 1, 1, 0, 1, 1, 0 }, /* 2016 */ <BR>{ =
27, 6, 6,=20
23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 }, =
<BR>{ 46,=20
0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0 =
}, <BR>{=20
35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, =
1, 0 },=20
<BR>{ 24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, =
0, 1, 0,=20
1 }, /* 2020 */ <BR>{ 42, 0, 4, 44, 0, 1, 1, 0, =
1, 0, 1,=20
0, 1, 0, 1, 0, 1 }, <BR>{ 31, 0, 5, 49, 1, 0, 1, =
0, 1,=20
1, 0, 1, 0, 1, 0, 1, 0 }, <BR>{ 21, 2, 6, 54, 0, =
1, 0,=20
1, 0, 1, 0, 1, 1, 0, 1, 0, 1 }, <BR>{ 40, 0, 0, =
59, 0,=20
1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, /* 2024 */ =
<BR>{=20
28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, =
0 },=20
<BR>{ 47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, =
1, 1, 0,=20
1 }, <BR>{ 36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, =
0, 1,=20
1, 0, 1 }, <BR>{ 25, 5, 5, 20, 1, 1, 1, 0, 1, 0, =
0, 1,=20
0, 0, 1, 1, 0 }, /* 2028 */ <BR>{ 43, 0, 0, 26, =
1, 1, 0,=20
1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }, <BR>{ 32, 0, 1, =
31, 1,=20
1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0 }, <BR>{ 22, =
3, 2,=20
36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 } };=20
<BR><BR>#define lastyear=20
(firstyear+sizeof(lunarcal)/sizeof(struct=20
taglunarcal)-1) <BR><BR>/* =
=CE=F7=C0=FA=C4=EA=C3=BF=D4=C2=D6=AE=C8=D5=CA=FD */ <BR>int=20
solarcal[12] =3D { 31, 28, 31, 30, 31, 30, 31, =
31, 30, 31,=20
30, 31 }; <BR><BR>/* =
=CE=F7=C0=FA=C4=EA=C3=BF=D4=C2=D6=AE=C0=DB=BB=FD=C8=D5=CA=FD, =
=C6=BD=C4=EA=D3=EB=C8=F2=C4=EA */ <BR>int=20
solardays[2][14] =3D { <BR>{ 0, 31, 59, 90, 120, =
151, 181,=20
212, 243, 273, 304, 334, 365, 396 }, <BR>{ 0, =
31, 60,=20
91, 121, 152, 182, 213, 244, 274, 305, 335, 366, =
397 }=20
}; <BR><BR>/* =
=C7=F3=B4=CB=CE=F7=C0=FA=C4=EA=CA=C7=B7=F1=CE=AA=C8=F2=C4=EA, =
=B7=B5=BB=D8 0 =CE=AA=C6=BD=C4=EA, 1 =CE=AA=C8=F2=C4=EA */ <BR>int=20
getleap( int year ) <BR>{ <BR>if ( year % 400 =
=3D=3D 0 )=20
<BR>return 1; <BR>else if ( year % 100 =3D=3D 0 =
) <BR>return=20
0; <BR>else if ( year % 4 =3D=3D 0 ) <BR>return =
1; <BR>else=20
<BR>return 0; <BR>} <BR><BR>/* =
=CE=F7=C0=FA=C5=A9=C0=FA=D7=AA=BB=BB */ <BR>int=20
calconv( struct convdate *cd ) <BR>{ <BR>int =
leap, d,=20
sm, y, im, l1, l2, acc, i, lm, kc; <BR>if (=20
cd->source =3D=3D 0 ) /* solar */ <BR>{ =
<BR>if (=20
cd->solaryear <=3D firstyear || =
cd->solaryear=20
> lastyear ) <BR>return 1; <BR>sm =3D =
cd->solarmonth=20
- 1; <BR>if ( sm < 0 || sm > 11 ) =
<BR>return 2;=20
<BR>leap =3D getleap( cd->solaryear ); <BR>if =
( sm =3D=3D 1=20
) <BR>d =3D leap + 28; <BR>else <BR>d =3D =
solarcal[sm];=20
<BR>if ( cd->solardate < 1 || =
cd->solardate=20
> d ) <BR>return 3; <BR>y =3D =
cd->solaryear -=20
firstyear; <BR>acc =3D solardays[leap][sm] +=20
cd->solardate; <BR>cd->weekday =3D ( acc + =
lunarcal[y].baseweekday ) % 7; <BR>kc =3D acc +=20
lunarcal[y].basekanchih; <BR>cd->kan =3D kc % =
10;=20
<BR>cd->chih =3D kc % 12; <BR>if ( acc =
<=3D=20
lunarcal[y].basedays ) <BR>{ <BR>y--;=20
<BR>cd->lunaryear =3D cd->solaryear - 1; =
<BR>leap =3D=20
getleap( cd->lunaryear ); <BR>sm +=3D 12; =
<BR>acc =3D=20
solardays[leap][sm] + cd->solardate; <BR>} =
<BR>else=20
<BR>cd->lunaryear =3D cd->solaryear; =
<BR>l1 =3D=20
lunarcal[y].basedays; <BR>for ( i=3D0; i<13; =
i++ )=20
<BR>{ <BR>l2 =3D l1 + lunarcal[y].monthdays<I> + =
29;=20
<BR>if ( acc <=3D l2 ) <BR>break; <BR>l1 =3D =
l2; <BR>}=20
<BR>cd->lunarmonth =3D i + 1; =
<BR>cd->lunardate =3D=20
acc - l1; <BR>im =3D lunarcal[y].intercalation; =
<BR>if (=20
im !=3D 0 && cd->lunarmonth > im ) =
<BR>{=20
<BR>cd->lunarmonth--; <BR>if ( =
cd->lunarmonth =3D=3D=20
im ) <BR>cd->lunarmonth =3D -im; <BR>} <BR>if =
(=20
cd->lunarmonth > 12 ) =
<BR>cd->lunarmonth -=3D 12;=20
<BR>} <BR>else /* lunar */ <BR>{ <BR>if (=20
cd->lunaryear < firstyear || =
cd->lunaryear=20
>=3D lastyear ) <BR>return 1; <BR>y =3D =
cd->lunaryear=20
- firstyear; <BR>im =3D =
lunarcal[y].intercalation; <BR>lm=20
=3D cd->lunarmonth; <BR>if ( lm < 0 ) =
<BR>{ <BR>if (=20
lm !=3D -im ) <BR>return 2; <BR>} <BR>else if ( =
lm < 1=20
|| lm > 12 ) <BR>return 2; <BR>if ( im !=3D 0 =
) <BR>{=20
<BR>if ( lm > im ) <BR>lm++; <BR>else if ( lm =
=3D=3D -im=20
) <BR>lm =3D im + 1; <BR>} <BR>lm--; <BR>if (=20
cd->lunardate > lunarcal[y].monthdays[lm] =
+ 29 )=20
<BR>return 3; <BR>acc =3D lunarcal[y].basedays; =
<BR>for (=20
i=3D0; i acc +=3D lunarcal[y].monthdays<I> + 29; =
<BR>acc +=3D=20
cd->lunardate; <BR>leap =3D getleap( =
cd->lunaryear=20
); <BR>for ( i=3D13; i>=3D0; i-- ) <BR>if ( =
acc >=20
solardays[leap]<I> ) <BR>break; =
<BR>cd->solardate =3D=20
acc - solardays[leap]<I>; <BR>if ( i <=3D 11 =
) <BR>{=20
<BR>cd->solaryear =3D cd->lunaryear;=20
<BR>cd->solarmonth =3D i + 1; <BR>} <BR>else =
<BR>{=20
<BR>cd->solaryear =3D cd->lunaryear + 1;=20
<BR>cd->solarmonth =3D i - 11; <BR>} <BR>leap =
=3D=20
getleap( cd->solaryear ); <BR>y =3D =
cd->solaryear -=20
firstyear; <BR>acc =3D=20
solardays[leap][cd->solarmonth-1] + =
cd->solardate;=20
<BR>cd->weekday =3D ( acc + =
lunarcal[y].baseweekday ) %=20
7; <BR>kc =3D acc + lunarcal[y].basekanchih;=20
<BR>cd->kan =3D kc % 10; <BR>cd->chih =3D =
kc % 12;=20
<BR>} <BR>return 0; <BR>} =
<BR><BR><BR>=D5=AA=D7=D4=A3=BA=D6=D0=BB=AA=BC=BC=CA=F5=CD=F8=20
<BR>=D7=F7=D5=DF=A3=BA=BB=C6=CF=FE=C3=F9<A =
name=3Dendpid213496></A>=20
<BR></I></I></I></I></TD></TR>
<TR align=3Dright>
<TD vAlign=3Dbottom><BR><BR><BR><BR><BR><IMG=20
=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -