公历和农历转换算法详解

1、公历和农历转换算法详解//C51写的公历转农历和星期#defineucharunsignedchar#defineuintunsignedint#include/*公历年对应的农历数据,每年三字节,格式第一字节BIT7-4位表示闰月月份,值为0为无闰月,BIT3-0对应农历第1-4月的大小第二字节BIT7-0对应农历第5-12月大小,第三字节BIT7表示农历第13个月大小月份对应的位为1表示本农历月大(30天),为0表示小(29天)第三字节BIT6-5表示春节的公历月份,BIT4-0表示春节的公历日期*/code

2、ucharyear_code[597]=(0x04,0xAe,0x53,//190100x0A,0x57,0x48,//190230x55,0x26,0xBd,//190360x0d,0x26,0x50,//190490x0d,0x95,0x44,//1905120x46,0xAA,0xB9,//1906150x05,0x6A,0x4d,//1907180x09,0xAd,0x42,//1908210x24,0xAe,0xB6,//19090x04,0xAe,0x4A,//19100x6A

3、,0x4d,0xBe,//19110x0A,0x4d,0x52,//19120x0d,0x25,0x46,//19130x5d,0x52,0xBA,//19140x0B,0x54,0x4e,//19150x0d,0x6A,0x43,//19160x29,0x6d,0x37,//19170x09,0x5B,0x4B,//19180x74,0x9B,0xC1,//19190x04,0x97,0x54,//19200x0A,0x4B,0x48,//19210x5B,0x25,0xBC,//19220x06

4、,0xA5,0x50,//19230x06,0xd4,0x45,//19240x4A,0xdA,0xB8,//19250x02,0xB6,0x4d,//19260x09,0x57,0x42,//19270x24,0x97,0xB7,//19280x04,0x97,0x4A,//19290x66,0x4B,0x3e,//19300x0d,0x4A,0x51,//19310x0e,0xA5,0x46,//19320x56,0xd4,0xBA,//19330x05,0xAd,0x4e,//19340x02,0xB6,

5、0x44,//19350x39,0x37,0x38,//19360x09,0x2e,0x4B,//19370x7C,0x96,0xBf,//19380x00,0x95,0x53,//19390x0d,0x4A,0x48,//19400x6d,0xA5,0x3B,//19410x0B,0x55,0x4f,//19420x05,0x6A,0x45,//19430x4A,0xAd,0xB9,//19440x02,0x5d,0x4d,//19450x09,0x2d,0x42,//19460x2O,0x95,0xB6,//1947

6、0x0A,0x95,0x4A,//19480x7B,0x4A,0xBd,//19490x06,0xOA,0x51,//19500x0B,0x55,0x46,//19510x55,0x5A,0xBB,//19520x04,0xdA,0x4e,//19530x0A,0x5B,0x43,//19540x35,0x2B,0xB8,//19550x05,0x2B,0x4O,//19560x8A,0x95,0x3f,//19570x0e,0x95,0x52,//19580x06,0xAA,0x48,//19590x7A,0xd5,

7、0x3O,//19600x0A,0xB5,0x4f,//19610x04,0xB6,0x45,//19620x4A,0x57,0x39,//19630x0A,0x57,0x4d,//19640x05,0x26,0x42,//19650x3e,0x93,0x35,//19660x0d,0x95,0x49,//19670x75,0xAA,0xBe,//19680x05,0x6A,0x51,//19690x09,0x6d,0x46,//19700x54,0xAe,0xBB,//19710x04,0xAd,0x4f,//1972

8、0x0A,0x4d,0x43,//19730x4d,0x26,0xB7,//19740x0d,0x25,0x4B,//19750x8d,0x52,0xBf,//19760x0B,0x54,0x52,//19770x0B,0x6A,0x47,//19780x69,0x6d,0x3C,//19790x09,0x5B,0x50,//19800x04,0x9B,0x45,//19810x4A,0x4B,0xB9,//19820x0A,0x4B,0x4d,//19830xAB,0x25,0xC2,//1984

9、0x06,0xA5,0x54,//19850x06,0xd4,0x49,//19860x6A,0xdA,0x3d,//19870x0A,0xB6,0x51,//19880x09,0x37,0x46,//19890x54,0x97,0xBB,//19900x04,0x97,0x4f,//19910x06,0x4B,0x44,//19920x36,0xA5,0x37,//19930x0e,0xA5,0x4A,//19940x86,0xB2,0xBf,//19950x05,0xAC,0x53,//1996

10、0x0A,0xB6,0x47,//19970x59,0x36,0xBC,//19980x09,0x2e,0x50,//19992940x00,0x96,0x45,//20002970x4d,0x4A,0xB8,//20010x0d,0x4A,0x40,//20020x0d,0xA5,0x41,//20030x25,0xAA,0xB6,//20040x05,0x6A,0x49,//20050x7A,0xAd,0xBd,//20060x02,0x5d,0x52,//20070x09,0x2d,0x47,

11、//20080x50,0x95,0xBA,//20090x0A,0x95,0x4e,//20100x0B,0x4A,0x43,//20110x4B,0x55,0x37,//20120x0A,0xd5,0x4A,//20130x95,0x5A,0xBf,//20140x04,0xBA,0x53,//20150x0A,0x5B,0x48,//2016170x65,0x2B,0xBC,//20170x05,0x2B,0x50,//20180x0A,0x93,0x45,//20190x47,0x4A,

12、0xB9,//20200x06,0xAA,0x4C,//20210x0A,0xd5,0x41,//20220x24,0xdA,0xB6,//20230x04,0xB6,0x4A,//20240x69,0x57,0x3d,//20250x0A,0x4e,0x51,//20260x0d,0x26,0x46,//20270x5e,0x93,0x3A,//20280x0d,0x53,0x4d,//20290x05,0xAA,0x43,//20300x36,0xB5,0x37,//20310x09,0x6d,0x4B,//2032

13、0xB4,0xAe,0xBf,//20330x04,0xAd,0x53,//20340x0A,0x4d,0x48,//20350x6d,0x25,0xBC,//20360x0d,0x25,0x4f,//20370x0d,0x52,0x44,//20380x5d,0xAA,0x38,//20390x0B,0x5A,0x4C,//20400x05,0x6d,0x41,//20410x24,0xAd,0xB6,//20420x04,0x9B,0x4A,//20430x7A,0x4B,0xBe,//20440x0A,0x4B,

14、0x51,//20450x0A,0xA5,0x46,//20460x5B,0x52,0xBA,//20470x06,0xd2,0x4e,//20480x0A,0xdA,0x42,//20490x35,0x5B,0x37,//20500x09,0x37,0x4B,//20510x84,0x97,0xC1,//20520x04,0x97,0x53,//20530x06,0x4B,0x48,//20540x66,0xA5,0x3C,//20550x0e,0xA5,0x4f,//20560x06,0xB2,0x44,//2057

15、0x4A,0xB6,0x38,//20580x0A,0xAe,0x4C,//20590x09,0x2e,0x42,//20600x3C,0x97,0x35,//20610x0C,0x96,0x49,//20620x7d,0x4A,0xBd,//20630x0d,0x4A,0x51,//20640x0d,0xA5,0x45,//20650x55,0xAA,0xBA,//20660x05,0x6A,0x4e,//20670x0A,0x6d,0x43,//20680x45,0x2e,0xB7,//2069

16、0x05,0x2d,0x4B,//20700x8A,0x95,0xBf,//20710x0A,0x95,0x53,//20720x0B,0x4A,0x47,//20730x6B,0x55,0x3B,//20740x0A,0xd5,0x4f,//20750x05,0x5A,0x45,//20760x4A,0x5d,0x38,//20770x0A,0x5B,0x4C,//20780x05,0x2B,0x42,//20790x3A,0x93,0xB6,//20800x06,0x93,0x49,//2081

17、0x77,0x29,0xBd,//20820x06,0xAA,0x51,//20830x0A,0xd5,0x46,//20840x54,0xdA,0xBA,//20850x04,0xB6,0x4e,//20860x0A,0x57,0x43,//20870x45,0x27,0x38,//20880x0d,0x26,0x4A,//20890x8e,0x93,0x3e,//20900x0d,0x52,0x52,//20910x0d,0xAA,0x47,//20920x66,0xB5,0x3B,//2093

18、0x05,0x6d,0x4f,//20940x04,0xAe,0x45,//20950x4A,0x4e,0xB9,//20960x0A,0x4d,0x4C,//20970x0d,0x15,0x41,//20980x2d,0x92,0xB5,//2099};///月份数据表codeucharday_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};codeuintday_code2[3]={0x111,0x130,0x14e};/*函数功能:输入BCD阳历

19、数据,输出BCD阴历数据(只允许1901-2099年)调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世纪,c_sun=1为19世纪调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据*/bitc_moon;da

20、taucharyear_moon,month_moon,day_moon,week;/*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/bitget_moon_day(ucharmonth_p,uinttable_addr)(uchartemp;switch(month_p)(case1:(temp=year_code[table_addr]&0x08;if(temp==0)return(0);elsereturn(1);}case2:(temp=year_code[table_addr]&0x04;i

21、f(temp==0)return(0);elsereturn(1);}case3:(temp=year_code[table_addr]&0x02;if(temp==0)return(0);elsereturn(1);}case4:(temp=year_code[table_addr]&0x01;if(temp==0)return(0);elsereturn(1);}case5:(temp=year_code[table_addr+1]&0x80;if(temp==0)return(0);elsereturn(1);}case6:(temp=ye

22、ar_code[table_addr+1]&0x40;if(temp==0)return(0);elsereturn(1);}case7:(temp=year_code[table_addr+1]&0x20;if(temp==0)return(0);elsereturn(1);}case8:(temp=year_code[table_addr+1]&0x10;if(temp==0)return(0);elsereturn(1);}case9:(temp=year_code[table_addr+1]&0x08;if(temp==0)return(0);

23、elsereturn(1);}case10:(temp=year_code[table_addr+1]&0x04;if(temp==0)return(0);elsereturn(1);}case11:(temp=year_code[table_addr+1]&0x02;if(temp==0)return(0);elsereturn(1);}case12:(temp=year_code[table_addr+1]&0x01;if(temp==0)return(0);elsereturn(1);}case13:(temp=year_code[table_a

24、ddr+2]&0x80;if(temp==0)return(0);elsereturn(1);}}}/*函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世纪,c_sun=1为19世纪调用

25、函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据*/voidConversion(bitc,ucharyear,ucharmonth,ucharday)(//c=0为21世纪,c=1为19世纪输入输出数据均为BCD数据uchartemp1,temp2,temp3,month_p;uinttemp4,table_addr;bitflag2,flag_y;temp1=year/16;//BCD->hex先把数据转换为十六进制temp2=year%16;year=temp

26、1*10+temp2;temp1=month/16;temp2=month%16;month=temp1*10+temp2;temp1=day/16;temp2=day%16;day=temp1*10+temp2;〃定位数据表地址if(c==0)(table_addr=(year+0x64-1)*0x3;}else(table_addr=(year-1)*0x3;}〃定位数据表地址完成〃取当年春节所在的公历月份temp1=year_code[table_addr+2]&0x60;temp1=_cror_(temp1,5

27、);〃取当年春节所在的公历月份完成〃取当年春节所在的公历日temp2=year_code[table_addr+2]&0x1f;〃取当年春节所在的公历日完成//计算当年春年离当年元旦的天数,春节只会在公历1月或2月if(temp1==0x1)(temp3=temp2-1;}elsetemp3=temp2+0x1f-1;}//计算当年春年离当年元旦的夭数完成〃计算公历日离当年元旦的天数,为了减少运算,用了两个表//day_code1[9],day_code2[3]〃如果公历月在九月或前,天数会少于0xff,用表day_code1[9

28、],〃在九月后,天数大于0xff,用表day_code2[3]//如输入公历日为8月10日,则公历日离元旦夭数为day_code1[8-1]+10-1//如输入公历日为11月10日,则公历日离元旦夭数为day_code2[11-10]+10-1if(month<10)(temp4=day_code1[month-1]+day-1;}else(temp4=day_code2[month-10]+day-1;}if((month>0x2)&&(year%0x4==0))(〃如果公历月大于2月并且该年的2月为闰月,天数加1temp4

29、+=1;}//计算公历日离当年元旦的夭数完成//判断公历日在春节前还是春节后if(temp4>=temp3)(//公历日在春节后或就是春节当日使用下面代码进行运算temp4-=temp3;month=0x1;month_p=0x1;//month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月flag2=get_moon_day(month_p,table_addr);//检查该农历月为大小还是小月,大月返回1,小月返回0flag_y=0;if(flag2==0)temp1=0x1d;//小月29天else

30、temp1=0x1e;//大小30天temp2=year_code[table_addr]&0xf0;temp2=_cror_(temp2,4);〃从数据表中取该年的闰月月份,如为0则该年无闰月while(temp4>=temp1)(temp4-=temp1;month_p+=1;if(month==temp2)(flag_y=~flag_y;if(flag_y==0)month+=1;}elsemonth+=1;flag2=get_moon_day(month_p,table_addr);if(flag2==0)tem

31、p1=0x1d;elsetemp1=0x1e;}day=temp4+1;}else{〃公历日在春节前使用下面代码进行运算temp3-=temp4;if(year==0x0){year=0x63;c=1;}elseyear-=1;table_addr-=0x3;month=0xc;temp2=year_code[table_addr]&0xf0;temp2=_cror_(temp2,4);if(temp2==0)month_p=0xc;elsemonth_p=0xd;///*month_p为月份指向,

32、如果当年有闰月,一年有十三个月,月指向13,无闰月指向12*/flag_y=0;flag2=get_moon_day(month_p,table_addr);if(flag2==0)temp1=0x1d;elsetemp1=0x1e;while(temp3>temp1){temp3-=temp1;month_p-=1;if(flag_y==0)month-=1;if(month==temp2)flag_y=~flag_y;flag2=get_moon_day(month_p,table_addr);if(flag2==0)temp1=0x1d;

33、elsetemp1=0x1e;}day=temp1-temp3+1;}c_moon=c;//HEX->BCD,运算结束后,把数据转换为BCD数据temp1=year/10;temp1=_crol_(temp1,4);temp2=year%10;year_moon=temp1|temp2;temp1=month/10;temp1=_crol_(temp1,4);temp2=month%10;month_moon=temp1|temp2;temp1=day/10;temp1=_crol_(temp1,4);temp2=day%

34、10;day_moon=temp1|temp2;}/*函数功能:输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年)调用函数示例:Conver_week(c_sun,year_sun,month_sun,day_sun)如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世纪,c_sun=1为19世纪调用函数后,原有数据不变,读week得出阴历BCD数据*/

35、codeuchartable_week[12]={0,3,3,6,1,4,6,2,5,0,3,5};//月修正数据表/*算法:日期+年份+所过闰年数+月较正数之和除7的余数就是星期但如果是在闰年又不到3月份上述之和要减一天再除7星期数为0*/voidConver_week(bitc,ucharyear,ucharmonth,ucharday){//c=0为21世纪,c=1为19世纪输入输出数据均为BCD数据uchartemp1,temp2;temp1=year/16;//BCD->hex先把数据转换为十六进制temp2=y

36、ear%16;year=temp1*10+temp2;temp1=month/16;temp2=month%16;month=temp1*10+temp2;temp1=day/16;temp2=day%16;day=temp1*10+temp2;if(c==0){year+=0x64;}//如果为21世纪,年份数加100temp1=year/0x4;〃所过闰年数只算1900年之后的temp2=year+temp1;temp2=temp2%0x7;〃为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据temp2=temp

37、2+day+table_week[month-1];if(year%0x4==0&&month<3)temp2-=1;week=temp2%0x7;}//testucharc_sun,year_sun,month_sun,day_sun;voidmain()(c_sun=1;year_sun=0x2;month_sun=0x11;day_sun=0x3;Conver_week(c_sun,year_sun,month_sun,day_sun);Conversion(c_sun,year_sun,month_sun,day_sun);

38、while(1);}算法一:公历转农历/*农历转换函数*/char*GetDayOf(PSYSTEMTIMEpSt)(/*天干名称*/constchar*cTianGan[]=("甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};/*地支名称*/constchar*cDiZhi[]=("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};/*属相名称*/constchar*cShuXiang[]=("鼠","牛","虎","兔","龙",

39、"蛇","马","羊","猴","鸡","狗","猪"};/*农历日期名*/constchar*cDayName[]=("*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","H,"十二","十三”,"十四","十五","十六","十","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};/*农历月份名*/constchar*cMonName[]=("*","正","二","三","四","五","六","七","八

40、","九","十","H^一","腊"};/*公历每月前面的天数*/constintwMonthAdd[12]={0,31,59,90,120,151,181,212,243,273,304,334};/*农历数据*/constintwNongliData[100]={2635,333387,1701,1748,267701,694,2391,133423,1175,396438,3402,3749,331177,1453,694,201326,2350,465197,3221,3402,400202,2901,1386,267611,605,2349

41、,137515,2709,464533,1738,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031,1175,1611,200010,3749,527717,1452,2

42、742,332397,2350,3222,268949,3402,3493,133973,1386,464219,605,2349,334123,2709,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};staticintwCurYear,wCurMonth,wCurDay;staticintnTheDate,nIsEnd,m,k,n,i,nBit;TCHARszNongli[30],szNongliDay[10],szShuXiang[10];/*---取当前公历年、月、日---*/

44、计算农历夭干、地支、月、日---*/nIsEnd=0;m=0;while(nIsEnd!=1){if(wNongliData[m]<4095)k=11;elsek=12;n=k;while(n>=0){//获取wNongliData(m)的第n个二进制位的值nBit=wNongliData[m];for(i=1;i

45、}nTheDate=nTheDate-29-nBit;n=n-1;}if(nlsEnd)break;m=m+1;}wCurYear=1921+m;wCurMonth=k-n+1;wCurDay=nTheDate;if(k==12){if(wCurMonth==wNongliData[m]/65536+1)wCurMonth=1-wCurMonth;elseif(wCurMonth>wNongliData[m]/65536+1)wCurM

46、onth=wCurMonth-1;}/*--生成农历夭干、地支、属相==>wNongli--*/wsprintf(szShuXiang,"%s”,cShuXiang[((wCurYear-4)%60)%12]);wsprintf(szNongli,"%s(%s%s)年”,szShuXiang,cTianGan[((wCurYear-4)%60)%10],cDiZhi[((wCurYear-4)%60)%12]);/*--生成农历月、日==>wNongliDay--*/if(wCurMonth<1)w

47、sprintf(szNongliDay,"闰%s",cMonName[-1*wCurMonth]);elsestrcpy(szNongliDay,cMonName[wCurMonth]);strcat(szNongliDay,"月");strcat(szNongliDay,cDayName[wCurDay]);returnstrcat(szNongli,szNongliDay);首先,我们要确定一个时刻,作为一天的起点(包括这个时刻)。然后我们以月亮通过朔望交界点的那一天作为每个月的第一天,以太阳通过雨水点的那个月作为正月,依次的,以太阳通过各中气点的那

50、DMofnextmonthisDM+ML-30.EndSelect每年中各月的月份、是否为闰月Fori=1to12ThismonthhasAdays.IfDY>=AThenThismonthisanExtraMonth.DY=DY-AElseThismonthistheiMonth.DY=DY+YL-Ai=i+1EndIfNext这就是我们的核心算法。通过它,我们可以从任何一个包含中气的月份开始向后推算各月各年的情况。由于我们所用的DM、DY

51、、ML、YL都是近似值,若干年后,我们的历法必有偏差,我们只要重新观测,更新DM、DY、ML、YL的值就可以了。事实上,诸朝气数最多不过400年,在这些值精确到万分位的时候,通行一朝是完全可以的。下面对大小月的排列和闰月的出现作一些定性分析显然0VDMV1,那么DMV0.4694时,当月为小月,下月为大月DM>0.4694时,当月为大月DMV0.4694*2时,下月为小月,下下月为大月DM>0.4694*2时,下月亦为大月,下下月为小月所以,大小月一般是交替出现,有时会出现连续两个月是大月的情况,但不会出现连续三个月或更多的

53、一个月,这一年就称为平年,一年有十三个月的时候,必然有且仅有一个月没有中气,那个月就时闰月,这一年就称为闰年。平年的时候,根据大小月的排列规则,一年最多有8个大月,最少有6个大月,因为ML*12+1V30*8+29*(12-8),所以不可能有8个大月,最多为7个大月,那么一年就为354或355天。闰年的时候,根据大小月的排列规则,一年最多有9个大月,最少有6个大月,因为ML*13+1V30*8+29*(13-8),所以不可能有8个或更多的大月,最多为7个大月,那么一年就为383或384天。因为每月的夭数不固

54、定,所以闰月的出现规律也不好讨论,连续十二个月的夭数也不固定,所以闰年的出现规律也不好讨论。不过可以肯定是,每年的第一个月肯定不是闰月,因为我们是以包含中气雨水的月份作为正月,也就是每年的第一个月的。所以,闰月必定出现在某个有名字的月份后面,出现在哪个后面就叫闰哪月。由于有闰月,所以函数形式:inttoSolar(intly,intIm,intId,int*sy,int*sm,int*sd,int*sy2,int*sm2,int*sd2);引理:公历y-m-d一定在农历y-m-d之前由引理,我们的探测可以从公历y-m-d开始,步骤如

55、下:1)toLunar(y,m,d,&ly0,&lm0,&ld0);2)估算ly0-lm0-ld0和ly-lm-ld的日子差N=(ly-ly0)*12*29+(lm-lm0)*29+(ld-ld0);3)如果N>0,把探测公历y-m-d加上这个夭数,dateAddDays(&y,&m,&d,N);4)如果N=0,如果(ly==ly0)&&(lm==lm0)&&(ld==ld0)得到一个解sy=y;sm=m;sd=d;(如果此时sy已经被赋值过,则sy2=y;sm2=m;sd2=d;返回退出)否则表

56、示出现误差,修正N=1;dateAddDays(&y,&m,&d,N);从而开始探测闰月,令N=30;dateAddDays(&y,&m,&d,N);5)如果N<0,且N>=-30,肯定是上次探测N+29不够(该月大),应该+30,所以令N=1;dateAddDays(&y,&m,&d,N);经过测试,最多需要3次可以命中,还是比较理想的算法了:)PS:经过完全测试,公元1500-2100年没有问,最多尝试次数为3次#defineLUNAR_TO_SOLAR_STEPS3//公历转公历搜索最长步数

58、的问题returnCALENDAR_ERROR;}intret;inty=LunarYear;intm=abs(LunarMonth);intd=LunarDay;inti,ldiff=0,lunDate;intly,lm,ld;validateDate(&y,&m,&d);for(i=0;i

59、)==abs(LunarMonth)&&ld==LunarDay)(if(lm==LunarMonth)(ret=YMD_TO_DATE(y,m,d);returnret;}//如果找到一个,则开始探测闰月ldiff=30;//要么直接转到,要么多了一天而已}else(ldiff=(LunarYear-ly)*12*29+(abs(LunarMonth)-abs(lm))*29+(LunarDay-ld);if(ldiff==0)(//稍做修正ldiff=1;}}dateAddDays(&y,&m,&d,Idiff);//注意可能出现负数}returnCALENDAR_ERROR;}

THE END
1.农历(中国现行的传统历法)千约到家“十二月建”是按照“二十四节气”而来的节气月,“十二月建”的分别是以季节为基准,即以立春、惊蛰、清明、立夏、芒种、小暑、立秋、皂露、寒露、立冬、大雪、小寒,划分做为寅月(摄提格)、卯月(单阏)、辰月(执徐)、巳月(大荒落)、午月(敦牂)、未月(协洽)、申月(涒滩)、酉月(做噩)、戌月(阉茂)、亥http://www.qianyue688.cn/caijing/1052.html
2.中国农历年份,rpa,机器人,自动化IP地址查询网万年历查询 日历查询 农历查询 农历日历 老黄历 万年 3 天之前?·?首页 > 中华 万年历查询表 中华万年历 本机时间 2024年法定假日安排 24节气 节日大全 公历转农历 农历转公历 农历 是否为润月 农历转公历 八字算命 出生 类型 八字算命 日干算命 更多内容请查看https://qq.ip138.com/day/ https://wdlinux.cn/html/zonghe/20241128/20015.html
3.农历大小月的确定方法农历大小月的算法一览表本文介绍了一种通过天干地支规则推算农历每个月天数的方法,以2012年为例详细步骤,并展示了如何利用60甲子表确定大小月。关键在于理解'大月天干进四,地支进八;小月天干进三,地支进七'的规则,以及如何应用干支转换来计算农历月天数。 摘要由CSDN通过智能技术生成 https://blog.csdn.net/aozhisheng/article/details/122299630
4.公历和农历转换算法详解20220811090641.docx指向首月flag2=get_moon_day(month_p,table_addr); //检查该农历月为大小还是小月,大月返回 1,小月返回 0 flag_y=0; if(flag2==0)temp1=0x1d;小/月/ 29 天 else temp1=0x1e;大/小/ 30 天 temp2=year_code[table_addr]0xf0; temp2=_cror_(temp2,4);//从数据表中取该年的闰月月份,如为https://max.book118.com/html/2022/0811/6231111230004222.shtm
5.2001年农历阳历对照表2001年日历查询表二零零一年阴历公历表易安居老黄历查询表说明:绿色代表二十四节气,阳历红色代表阳历和农历重要的节日,蓝色加色的为阳历次要的节日。 以下所展示的为2001年的阳历农历对照表,含有24节气、全年大小https://m.zhouyi.cc/huangli/nongli/15511.html
6.万年历干支查询表(万年历属相查询表)日柱,即用农历的干支代表人出生的那。干支记日每六十天一循环,由于大小月及平闰年不同的缘故,日干支需查找万年历。 日柱,在命学上是以晚上子时开始顺时针到亥时,十二个时辰为,每一个时辰占两个钟点。日与日的分界线是以子时来划分的,即晚上的十一点。十一点前是上一日的亥时,过了十一点就是次日的子时。这https://www.16757.com/ysh/huangli/2623.html
7.农历是怎么计算大小月的?农历月的大小很不规则,有时连续两个、三个、四个大月或连续两个三个小月,历年的长短也不一样,而且差距很大。节气和中气,在农历里的分布日期很不稳定,而且日期变动的范围很大。这样看来,农历似乎显得十分复杂。其实。农历还是有一定循环规律的:由于十九个回归年的日数与十九个农历年的日数差不多相等,就使农历每隔https://www.360doc.cn/article/13649821_856003655.html
8.2024年日历全年表最准确的日历表查询最准确的日历表查询去哪查呢?和小编一起去瞧瞧吧。 2024年日历全年表 最准确的日历表查询 2024年是甲辰青龙年 农历2024年是甲辰年,公元2024年,公历闰年,共366天、53周。 2024农历是甲辰年(龙年),无闰月,共354天,是2020年代的第五年,第二个闰年。 2024年,也是农历的甲辰年,天干是甲,地支是辰,属于五行中的https://m.tianqiyubao4.com/news_6579894.shtml
9.17日历后四位不为0,十进制是2,表示今年农历会闰二月;前四位为0,说明闰二月只有29天。中间的十二位对应大小月,以5-8位的0101来说明,正月为0,说明它是小月,只有29天;二月为1,说明是大月,有30天;三月为0,小月,29天;···以此类推。 具体数据: finalstatichttps://www.jianshu.com/p/ec708b3fee0f
10.年三十去哪了?大年三十初一公历朔望月“这和我国独有的农历算法有关” 公历的一个月 有的是30天,有的是31天 2月只有28-29天 而农历,也有大小月之分 大月30天,小月29天 这是因为农历 是根据月亮的圆缺变化来编算的 在天文学中被称为“朔望月” 什么是“朔望月”? 月亮有圆缺变化 https://dy.163.com/article/GUVKE6T60514N3TH.html
11.2019年农历九月份有多少天?农历为什么有大月和小月?农历年中月以朔望月长度29.5306日为基础,所以大月为30日,小月为29日。为保证每月的头一天(初一)必须是朔日,就使得大小月的安排不固定,而需要通过严格的观测和计算来确定。 “三分命,七分运”,命有贵贱,运有好坏。 想知道自身运势,点击下方【精品测算】,测最新2019年运势!https://www.k366.com/rili/84749.html
12.热搜第一!明年起,连续5年都没有大年三十为什么会出现没有大年三十的情况呢?中科院紫金山天文台副研究员成灼对此给予了解释,“这和我国独有的农历算法有关。” 原来,公历的一个月,有的有30天,有的有31天,2月只有28-29天。而农历,也有大小月之分,大月30天,小月29天。这是因为农历是根据月亮的圆缺变化来编算的,在天文学中被称为“朔望月”。 https://m.gmw.cn/2024-01/10/content_1303626716.htm