阳历到阴历的转换
考研屋 www.kaoyanwu.com 提供各大机构考研、公务员、四六级辅导视频课程
/*
西历农历转换程式 prototype: int CalConv( struct ConvDate * );
struct ConvDate { int Source; ==0 则输入日期为西历, !=0 则输入为农
历 int SolarYear; 输出或输入之西历年份 int SolarMonth; 西历月 int
SolarDate; 西历日 int LunarYear; 输出或输入之农历年份 int LunarMonth; 农历月 int LunarDate; 农历日 int Weekday; 该日为星期几 ( 0==星期日,
1==星期一, ... ) int Kan; 该日天干 ( 0==甲, 1==乙, ..., 9==癸 ) int Chih; 该日地支 ( 0==子, 1==丑, ..., 11==亥 ) };
呼叫时须设定 Souce 的值, 若为 0 则为西历转农历, 否则为农历转西历. 然後视输
入为西历或农历来设定西历或农历的年月日. 转换後的年月日会填入结构中( 农历或西历 ),
以及该日为星期几, 天干地支.若函式的返回值为 0 表示没有错误, 1 为输入之年份错误, 2
为输入之月份错误,3 为输入之日期错误. 输入之西历年须在 1937 - 2031 间 输入之
农历年须在 1936 - 2030 间 若须扩充, 则增加 LunarCal[]
*/
#define FIRSTYEAR 1936 /* The first year in LunarCal[] */
struct ConvDate { int Source; int SolarYear; int SolarMonth;
int SolarDate; int LunarYear; int LunarMonth; int LunarDate; int
Weekday; int Kan; int Chih; };
struct tagLunarCal { int BaseDays; /* 到西历 1 月 1 日到农历正
月初一的累积日数 */ int Intercalation; /* 闰月月份. 0==此年没有闰月 */
int BaseWeekday; /* 此年西历 1 月 1 日为星期几再减 1 */ int BaseKanChih; /* 此年西历 1 月 1 日之干支序号减 1 */ int MonthDays[13]; /* 此农历年每月
之大小, 0==小月(29日), 1==大月(30日) */ };
struct tagLunarCal LunarCal[] = { { 23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 },
/* 1936 */ { 41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 }, { 30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 }, { 49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }, { 38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, /* 1940 */ { 26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{ 45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, { 35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1,
0, 1 }, { 24, 4, 5, 59, 1, 0, 1, 0,
专业提供提供各大机构考研、公务员、四六级辅导视频课
考研屋 www.kaoyanwu.com 提供各大机构考研、公务员、四六级辅导视频课程
考研屋www.kaoyanwu.com :提供各大机构考研、公务员、四六级辅导视频课程
专业提供提供各大机构考研、公务员、四六级辅导视频课