问题描述
根据农历得到公历。例:用户输入中秋、春节、端午节我就要得到今年、去年、前年的公历的日期。这个算法怎么实现。请各位大侠指教。
解决方案
解决方案二:
基本思路是做一个表,把每年的闰月情况存到里面,然后用的时候查表。usingSystem;namespaceHYThought.Component{///<summary>///LunDay的摘要说明。///用法说明///直接调用即可,比较简单///</summary>publicclassLunDay{publicLunDay(){////TODO:在此处添加构造函数逻辑//}//天干privatestaticstring[]TianGan={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};//地支privatestaticstring[]DiZhi={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};//十二生肖privatestaticstring[]ShengXiao={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};//农历日期privatestaticstring[]DayName={"*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};//农历月份privatestaticstring[]MonthName={"*","正","二","三","四","五","六","七","八","九","十","十一","腊"};//公历月计数天privatestaticint[]MonthAdd={0,31,59,90,120,151,181,212,243,273,304,334};//农历数据privatestaticint[]LunarData={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,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,2742,332397,2350,3222,268949,3402,3493,133973,1386,464219,605,2349,334123,2709,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};///<summary>///获取对应日期的农历///</summary>///<paramname="dtDay">公历日期</param>///<returns></returns>publicstringGetLunarCalendar(DateTimedtDay){stringsYear=dtDay.Year.ToString();stringsMonth=dtDay.Month.ToString();stringsDay=dtDay.Day.ToString();intyear;intmonth;intday;try{year=int.Parse(sYear);month=int.Parse(sMonth);day=int.Parse(sDay);}catch{year=DateTime.Now.Year;month=DateTime.Now.Month;day=DateTime.Now.Day;}intnTheDate;intnIsEnd;intk,m,n,nBit,i;stringcalendar=string.Empty;//计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)nTheDate=(year-1921)*365+(year-1921)/4+day+MonthAdd[month-1]-38;if((year%4==0)&&(month>2))nTheDate+=1;//计算天干,地支,月,日nIsEnd=0;m=0;k=0;n=0;while(nIsEnd!=1){if(LunarData[m]<4095)k=11;elsek=12;n=k;while(n>=0){//获取LunarData[m]的第n个二进制位的值nBit=LunarData[m];for(i=1;i<n+1;i++)nBit=nBit/2;nBit=nBit%2;if(nTheDate<=(29+nBit)){nIsEnd=1;break;}nTheDate=nTheDate-29-nBit;n=n-1;}if(nIsEnd==1)break;m=m+1;}year=1921+m;month=k-n+1;day=nTheDate;returnyear+"-"+month+"-"+day;//#region格式化日期显示为三月廿四//if(k==12)//{//if(month==LunarData[m]/65536+1)//month=1-month;//elseif(month>LunarData[m]/65536+1)//month=month-1;//}//////生肖//calendar=ShengXiao[(year-4)%60%12].ToString()+"年";//////天干////calendar+=TianGan[(year-4)%60%10].ToString();//////地支////calendar+=DiZhi[(year-4)%60%12].ToString()+"";//////农历月//if(month<1)//calendar+="闰"+MonthName[-1*month].ToString()+"月";//else//calendar+=MonthName[month].ToString()+"月";//////农历日//calendar+=DayName[day].ToString()+"日";////returncalendar;////#endregion}}}
解决方案三:
我这有个例子,你把你的电子邮箱个我说一下,我给你发过去
解决方案四:
up
解决方案五:
up
解决方案六:
.net2.0有农历类...
解决方案七:
我已经发过去了,请注意查看哦!
解决方案八:
Googel上面直接输:公历农历
解决方案九:
usingSystem.Globalization
解决方案十:
ChineseLunisolarCalenda
解决方案十一:
参考http://www.cnblogs.com/kuku-1/archive/2008/10/18/1314179.htmlhttp://www.cnblogs.com/hocylan/archive/2007/11/16/961218.htmlhttp://www.cnblogs.com/bbxie/archive/2008/01/11/1035265.html
解决方案十二:
mark
解决方案十三:
引用1楼grearo的回复:
基本思路是做一个表,把每年的闰月情况存到里面,然后用的时候查表。usingSystem;namespaceHYThought.Component{///<summary>///LunDay的摘要说明。///用法说明///直接调用即可,比较简单///</summary>publicclassLunDay{publicLunDay(){////TODO:在此处添加构造函数逻辑//}//天干privatestaticstring[]TianGan={"甲","乙","丙","丁","戊","己","庚…
解决方案十四:
mark
解决方案十五:
解决方案:
引用14楼的回复:
http://www.bianceng.cn/Programming/csharp/201107/27675.htm
上面地址给错了