原来还准备自己写算法,并研究农历规则。发现那太难和麻烦了,光是农历的推算那就我等专门研究历法的人一下搞懂的。后来发现
下。实现了公历农历转换的功能。但是只能算到1900~2100年之间的。基本够日常使用了。源代码如下:
///11.classChinaDateTime12.{13.privateintyear,month,dayOfMonth;14.privateboolisLeap;15.publicDateTimetime;16.17.////
Year21.{22.get{returnyear;}23.}24.25.////
Month29.{30.get{returnmonth;}31.}32.33.////
intDayOfMonth37.{38.get{returndayOfMonth;}39.}40.41.////
cc.MinSupportedDateTime.ToShortDateString()+"到"+cc.MaxSupportedDateTime.ToShortDateString());60.year=cc.GetYear(time);61.month=cc.GetMonth(time);62.dayOfMonth=cc.GetDayOfMonth(time);63.isLeap=cc.IsLeapMonth(year,month);64.if(isLeap)month-=1;65.this.time=time;66.67.}68.69.////
80.///
publicDateTimeToDateTime()108.{109.returncc.ToDateTime(year,isLeapmonth+1:month,dayOfMonth,time.Hour,time.Minute,
///
///
ToChinaDateTime(DateTimeTime)128.{129.returnnewChinaDateTime(Time);130.}131.}132.}二、C#代码(2):
1、农历类的使用
.net框架不支持直接将日期转换成农历格式的字符串,那么要将显示农历格式的日期,就只要自已写代码了。不过由于已经有了
ChineseLunisolarCalendar类实现了公历转换为农历日期的功能,所以要写这样的代码也比较简单。需要用到
ChineseLunisolarCalendar以下几个主要方法:
intGetYear(DateTimetime)获取指定公历日期的农历年份,使用的还是公历纪元。在每年的元旦之后春节之前农历的纪年会比公
历小1,其它时候等于公历纪年。虽然农历使用传说中的耶稣生日纪元似乎不太妥当,不过我们确实已经几十年没有实行一个更好的纪
年办法,也只有将就了。
intGetMonth(DateTimetime)获取指定公历日期的农历月份。这里要注意了,由于农历有接近三分之一的年份存在闰月,则在这
些年份里会有十三个,而具体哪一个月是闰月也说不准,这里不同于希伯来历。以今年为例,今年闰七月,则此方法在参数为闰七月
的日期是返回值为8,参数为农历十二月的日期时返回值为13
boolIsLeapMonth(intyear,intmonth)获取指定农历年份和月份是否为闰月,这个函数和上个函数配合使用就可以算出农历
的月份了。
intGetDayOfMonth(DateTimetime)获取指定公历日期的农历天数,这个值根据大月或者小月取值是1到30或者1到29,MSDN上说的
1到31显然是错的,没有哪个农历月份会有31天。
intGetSexagenaryYear(DateTimetime)获取指定公历日期的农历年份的干支纪年,从1到60,分别是甲子、乙丑、丙寅、….癸亥
,比如戊戌变法、辛亥革命就是按这个来命名的。当然算八字也少不了这个。
intGetCelestialStem(intsexagenaryYear)获取一个天支的天干,从1到10,表示甲、乙、丙….,说白了就是对10取模。
intGetTerrestrialBranch(intsexagenaryYear))获取一个干支的地支,,从1到12,表示子、丑、寅、…今年是狗年,那么今
年年份的地支就是“戌”。
有了这几个方法,显示某天的农历月份日期、农历节日等都是小菜一碟,算命先生排八字用这几个方法,又快又准确,写出的代码也
很短。
2、几种东亚农历类的区别
经过我的测试,ChineseLunisolarCalendar,JapaneseLunisolarCalendar,KoreanLunisolaCalendarr,TaiwanLunisolarCalendar
这四种日历,无论哪一种,以2006年2月6日为参数,调用它们的GetMonth方法得到的结果都是1,GetDayOfMonth得到的结果都是8。
想想也是,我们过的端午节和韩国的不太可能不是一天。
但是调用GetYear方法得到结果就有区别了ChineseLunisolarCalendar和KoreanLunisolarCalendar都返回2006,也就是公历纪年,
TaiwanLunisolarCalendar的返回值是95,依然是民国纪年,JapaneseLunisolarCalendar的返回值是18,平成纪年。
另外的一个区别是这四种日历的MinSupportedDateTime和MaxSupportedDateTime各不一样,以下是对照表:
日历类MinSupportedDateTimeMaxSupportedDateTimeChineseLunisolarCalendar公元1901年1月初1公元2100年12月29TaiwanLunisolarCalendar民国1年1月初1民国139年12月29JapaneseLunisolarCalendar昭和35年1月初1平成61年12月29KoreanLunisolarCalendar公元918年1月初1公元2050年12月29
韩国农历类支持的最小日期为918年(也即高丽王朝建立的年份),以此而论,中国农历类支持的最小日期不说从商周算起,从汉唐算
总该没问题吧?微软公司啊,又在“厚彼薄此”,唉。
其次,日本还以天皇纪年,如果哪天xxxx,岂不是使用JapaneseLunisolarCalendar写出的程序都有问题啦?
3、写自已的日期格式化器
culture.nlp的文件中(这个文件在以前的.net框架是一个独立的文件,在.net2.0被作为一个资源编译到mscorlib.dll中。)(我的
这个不能为DateTime写自已的格式化器的观点没有资料佐证,如有不当之处,请大家指正)
虽然不能为DataTime写自定义的格式器,但还有另外一个途径,就是为String类的Format方法写自定义格式化器,我测试了一下,效
果还不错,调用方式如下:
strings=String.Format(newChineseCalendarFormatter(),"{0:D}",DateTime.Now);可以得到“二〇〇六年正月初九”strings=String.Format(newChineseCalendarFormatter(),"{0:d}",DateTime.Now);可以得到“丙戌年正月初九”
虽然没有前面所设想的方便,但也还能接受,全部代码帖出如下:第一个类,主要是封装了农历的一些常用字符和对日历处理的最基本功能
1.usingSystem;2.usingSystem.Collections.Generic;3.usingSystem.Text;4.5.usingSystem.Globalization;6.usingSystem.Threading;7.8.publicclassChineseCalendarFormatter:IFormatProvider,ICustomFormatter9.{10.//实现IFormatProvider11.publicobjectGetFormat(TypeformatType)12.{13.if(formatType==typeof(ICustomFormatter))14.returnthis;15.else16.returnThread.CurrentThread.CurrentCulture.GetFormat(formatType);17.}18.19.//实现ICustomFormatter20.publicstringFormat(stringformat,objectarg,IFormatProvider
formatProvider)21.{22.strings;23.IFormattableformattable=argasIFormattable;24.if(formattable==null)25.s=arg.ToString();26.else27.s=formattable.ToString(format,formatProvider);28.if(arg.GetType()==typeof(DateTime))29.{30.DateTimetime=(DateTime)arg;31.switch(format)32.{33.case"D"://长日期格式34.s=String.Format("{0}年{1}月{2}",35.ChineseCalendarHelper.GetYear(time),36.ChineseCalendarHelper.GetMonth(time),37.ChineseCalendarHelper.GetDay(time));38.break;39.case"d"://短日期格式40.s=String.Format("{0}年{1}月{2}",
ChineseCalendarHelper.GetStemBranch(time),41.ChineseCalendarHelper.GetMonth(time),42.ChineseCalendarHelper.GetDay(time));43.break;44.case"M"://月日格式45.s=String.Format("{0}月{1}",
ChineseCalendarHelper.GetMonth(time),46.ChineseCalendarHelper.GetDay(time));47.break;48.case"Y"://年月格式49.s=String.Format("{0}年{1}月",
ChineseCalendarHelper.GetYear(time),50.ChineseCalendarHelper.GetMonth(time));51.break;52.default:53.s=String.Format("{0}年{1}月{2}",ChineseCalendarHelper.GetYear(time),54.ChineseCalendarHelper.GetMonth(time),55.ChineseCalendarHelper.GetDay(time));56.break;57.}58.}59.returns;60.}61.}这段代码中间处理格式那部份稍做改进,就可以支持更多的日期格式。
有了这两段代码为原型,要实现计算和显示一个日期的农历日期及其它功能,基本上就很容易了。
三、VBScript代码:
(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,37549
4,397447,419210,440795,462224,483532,504758)147.varsolarTerm=newArray("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","
小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至")148.varlFtv=newArray("0101*春节","0115元宵节","0505端午节","0707七夕情人节","0715中元节","0815中秋节","0909
重阳节","1208腊八节","1224小年","0100*除夕")149.varsFtv=newArray("0101*元旦","0214情人节","0308妇女节","0312植树节","0315消费者权益日",150."0401愚人节","0501劳动节","0504青年节","0512护士节","0601儿童节","0701建党节香港回归纪念",151."0801建军节","0808父亲节","0908茂生日","0909逝世纪念","0910教师节","0928孔子诞辰","1001*国庆节",152."1006老人节","1001ListenWind生日","1024联合国日","1112孙中山诞辰","1220澳门回归纪念","1225圣诞节","1226诞
lunarFestival+''+185.'';186.187.varcl=' Firefox,请使用查找、替换,把getYear()修改为getFullYear()就可以支持firefox了。 五、Flash代码: 农历FLASH源码、旧历FLASH日历、旧历FLASH时钟在FLASH中,制作时钟、日历都不难。在网上搜索一下,也会有一大遍源码等着你去下载。但不知是我孤陋寡闻,还是咋地。在网上 附上。希望大家共同讨论。其中难的就是闰月部分。 制作过程,前面的就不说了。直接发代码吧。新建一倒计时类"Taoshaw_data.as"。然后输入如下代码: /*=============================================7.公元1900-2100两百年的农历类。8.类的调用方法说明9.getFullYear();获取新历年份10.getnewMonth();获取月份11.getDate()获取多少号.12.getSeconds();获取秒值13.getDay();获取星期几14.getHours();获取小时(整点)15.getMinutes();获取分数16.getTaosJYear();获取中国农历年.17.getTaoJMonth();获取中国农历月.18.getTaoJDay();获取中国农历日.19.getTaoJNianZhu();获取年柱20.getYueZhu();获取月柱21.getRiZhu();获取日柱22.getShiceng();获取时辰23.getJieQi();获取二十四节气24.=============================================*/25.privatevartao_txtnum_info=newArray(0x4bd8,0x4ae0, 0xa570,0x54d5,0xd260,0xd950,0x5554,0x56af,0x9ad0,0x55d2,0x4ae0,0xa5b6,0xa4d0,0xd250,0xd255,0xb54f, 0xd6a0,0xada2,0x95b0,0x4977,0x497f,0xa4b0,0xb4b5,0x6a50,0x6d40,0xab54,0x2b6f,0x9570,0x52f2,0x4970, 0x6566,0xd4a0,0xea50,0x6a95,0x5adf,0x2b60,0x86e3,0x92ef,0xc8d7,0xc95f,0xd4a0,0xd8a6,0xb55f,0x56a0, 0xa5b4,0x25df,0x92d0,0xd2b2,0xa950,0xb557,0x6ca0,0xb550,0x5355,0x4daf,0xa5b0,0x4573,0x52bf,0xa9a8, 0xe950,0x6aa0,0xaea6,0xab50,0x4b60,0xaae4,0xa570,0x5260,0xf263,0xd950,0x5b57,0x56a0,0x96d0,0x4dd5, 0x4ad0,0xa4d0,0xd4d4,0xd250,0xd558,0xb540,0xb6a0,0x95a6,0x95bf,0x49b0,0xa974,0xa4b0,0xb27a,0x6a50, 0x6d40,0xaf46,0xab60,0x9570,0x4af5,0x4970,0x64b0,0x74a3,0xea50,0x6b58,0x5ac0,0xab60,0x96d5,0x92e0, 0xc960,0xd954,0xd4a0,0xda50,0x7552,0x56a0,0xabb7,0x25d0,0x92d0,0xcab5,0xa950,0xb4a0,0xbaa4,0xad50, 0x55d9,0x4ba0,0xa5b0,0x5176,0x52bf,0xa930,0x7954,0x6aa0,0xad50,0x5b52,0x4b60,0xa6e6,0xa4e0,0xd260, 0xea65,0xd530,0x5aa0,0x76a3,0x96d0,0x4afb,0x4ad0,0xa4d0,0xd0b6,0xd25f,0xd520,0xdd45,0xb5a0,0x56d0, 0x55b2,0x49b0,0xa577,0xa4b0,0xaa50,0xb255,0x6d2f,0xada0,0x4b63,0x937f,0x49f8,0x4970,0x64b0,0x68a6, 0xea5f,0x6b20,0xa6c4,0xaaef,0x92e0,0xd2e3,0xc960,0xd557,0xd4a0,0xda50,0x5d55,0x56a0,0xa6d0,0x55d4, 0x52d0,0xa9b8,0xa950,0xb4a0,0xb6a6,0xad50,0x55a0,0xaba4,0xa5b0,0x52b0,0xb273,0x6930,0x7337,0x6aa0, 0xad50,0x4b55,0x4b6f,0xa570,0x54e4,0xd260,0xe968,0xd520,0xdaa0,0x6aa6,0x56df,0x4ae0,0xa9d4,0xa4d0, 0xd150,0xf252,0xd520);26.privatevartao_txtsolarMonth=newArray(31,28,31,30,31,30,31,31,30,31,30,31);27.//定义私有函数干支等信息28.privatevarGan=newArray("甲","乙","丙","丁","戊","己","庚","辛","壬", "癸");29.privatevarZhi=newArray("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");30.privatevarAnimals=newArray("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");31.//农历节气32.privatevartao_txtsolarTerm=newArray("小寒","大寒","立春","雨水","惊蛰","春分","清 明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬", "小雪","大雪","冬至");33.privatevartao_txtsTermInfo=newArray(0,21208,42467,63836,85337,107014,128867,150921,173149,195551, 218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);34.privatevarnStr1=newArray('日','一','二','三','四','五','六','七','八','九','十');35.privatevarnStr2=newArray('初','十','廿','卅','□');36.privatevarmonthName=newArray("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV", "DEC");37.privatevarcyear:Number;38.privatevarcmonth:Number;39.privatevarcday:Number;40.privatevarisLeap:Boolean;41.privatevarnianzhu:String;42.privatevaryuezhu:String;43.privatevarrizhu:String;44.privatevarjie:String;45.publicfunctionTaoshaw_data(yearOrTimevalue:Number,month:Number,date:Number,hour:Number,minute:Number, 加onEnterFrame函数.215.onEnterFrame=function(){216.varmy_data:Taoshaw_data=newTaoshaw_data();217.//定义两个数组,用于显示**月,以及星期*218.varmy_xingqi:Array=newArray();219.my_xingqi=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];220.varmy_yuefen:Array=newArray();221.my_yuefen=["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"];222.//定义变量myhaoshu获取当前日的号数223.varmyhaoshu=my_data.getDate();224.//当数值小于10的时候,就在前面添加一个0;225.varmiao=my_data.getSeconds();226.varfen=my_data.getMinutes();227.if(fen<10){228.fen="0"+fen;229.}else{230.}231.if(miao<10){232.miao="0"+miao;233.}else{234.}235.if(myhaoshu<10){236.myhaoshu="0"+myhaoshu;237.}else{238.}239.show_txt.text="现在是"+my_data.getFullYear()+"年"+my_yuefen[my_data.getMonth()]+myhaoshu+"号"+my_xingqi [my_data.getDay()]+my_data.getHours()+"时"+fen+"分"+miao+"秒。"+"旧历"+my_data.getTaosJYear() +"."+my_data.getTaoJMonth()+"."+my_data.getTaoJDay()+"农历"+my_data.getTaoJNianZhu()+"年"+my_data.getYueZhu() 六、C++代码: 1、头文件1.//xDate.h &iMonth,WORD&iDay,LONGiSpanDays);25.//计算公历iYear年iMonth月iDay日对应的节气0-24,0表不是节气26.staticWORDl_GetLunarHolDay(WORDiYear, WORDiMonth,WORDiDay);27.public:28.//=====================================================================================//29.xDate(WORD iYear,WORDiMonth,WORDiDay);30.xDate();31.//=====================================================================================//32.33.WORD GetYear(){returnm_iYear;}34.WORDGetMonth(){returnm_iMonth;}35.WORDGetDay(){returnm_iDay;}36.37.//=====================================================================================//38.voidGetDate (WORD&iYear,WORD&iMonth,WORD&iDay);39.BOOLSetDate(WORDiYear,WORDiMonth,WORDiDay);40.//=====================================================================================//41.//判断iYear是 不是闰年42.staticBOOLIsLeapYear(WORDiYear){return!(iYear%4)&&(iYear%100)||!(iYear%400);}43.44.//计算iYear,iMonth,iDay对应是星期几1年1月1日---65535年12月31日45.staticWORDWeekDay(WORDiYear,WORD iMonth,WORDiDay);46.47.//返回iYear年iMonth月的天数1年1月---65535年12月48.staticWORDMonthDays(WORDiYear,WORDiMonth);49.50.//返回阴历iLunarYer年阴历iLunarMonth月的天数,如果iLunarMonth为闰月,51.//高字为第二个iLunarMonth月的天数 ,否则高字为052.//1901年1月---2050年12月53.staticLONGLunarMonthDays(WORDiLunarYear,WORD iLunarMonth);54.55.//返回阴历iLunarYear年的总天数56.//1901年1月---2050年12月57.staticWORDLunarYearDays(WORD iLunarYear);58.59.//返回阴历iLunarYear年的闰月月份,如没有返回060.//1901年1月---2050年12月61.staticWORD GetLeapMonth(WORDiLunarYear);62.63.//把iYear年格式化成天干记年法表示的字符串64.staticvoidFormatLunarYear(WORDiYear,char*pBuffer);65.66.//把iMonth格式化成中文字符串67.staticvoidFormatMonth(WORDiMonth,char*pBuffer,BOOLbLunar= TRUE);68.69.//把iDay格式化成中文字符串70.staticvoidFormatLunarDay(WORDiDay,char*pBuffer);71.72.//计算公历两个日期间相差的天数1年1月1日---65535年12月31日73.staticLONGCalcDateDiff(WORDiEndYear, WORDiEndMonth,WORDiEndDay,WORDiStartYear=START_YEAR,WORDiStartMonth=1,WORDiStartDay=1);74.75.//计算公历iYear年iMonth月iDay日对应的阴历日期,返回对应的阴历节气0-2476.//1901年1月1日---2050年12月31日 77.staticWORDGetLunarDate(WORDiYear,WORDiMonth,WORDiDay,WORD&iLunarYear,WORD&iLunarMonth,WORD &iLunarDay);78.};79.80.#endif//XDATE_H2、实现文件1.//xDate.cpp2.#include"xDate.h"3.//#include iMonth,WORDiDay)24.{25.if(!SetDate(iYear,iMonth,iDay))26.l_InitData();27.}28.//===========================================================================//29.xDate::xDate()30.{31.l_InitData();32.}33.//===========================================================================//34.LONGxDate::CalcDateDiff(WORD iEndYear,WORDiEndMonth,WORDiEndDay,WORDiStartYear,WORDiStartMonth,WORDiStartDay)35.{36.WORDmonthday[]={0,31,59,90,120,151,181,212,243,273,304,334};37.//计算两个年份1月1日之间相差的天数38.LONGiDiffDays=(iEndYear-iStartYear)*365;39.iDiffDays+=(iEndYear-1)/4-(iStartYear-1)/4;40.iDiffDays-=((iEndYear-1)/100-(iStartYear-1)/100);41.iDiffDays+=(iEndYear-1)/400-(iStartYear-1)/400;42.//加上iEndYear年1月1日到iEndMonth月iEndDay日之间的天数43.iDiffDays+=monthday[iEndMonth-1]+44.(IsLeapYear(iEndYear)&&iEndMonth>21:0);45.iDiffDays+=iEndDay;46.//减去iStartYear年1月1日到iStartMonth月iStartDay日之间的天数47.iDiffDays-=(monthday[iStartMonth-1]+ (IsLeapYear(iStartYear)&&iStartMonth>21:0));48.iDiffDays-=iStartDay;49.returniDiffDays;50.}51.//===========================================================================//52.voidxDate::l_CalcLunarDate (WORD&iYear,WORD&iMonth,WORD&iDay,LONGiSpanDays)53.{54.//阳历1901年2月19日为阴历1901年正月初一55.//阳历1901年1月1日到2月19日共有49天56.if(iSpanDays<49)57.{58.iYear=START_YEAR-1;59.if(iSpanDays<19)60.{61.iMonth=11;62.iDay=11+WORD(iSpanDays);63.}64.else65.{66.iMonth=12;67.iDay=WORD(iSpanDays)-18;68.}69.return;70.}71.//下面从阴历1901年正月初一算起72.iSpanDays-=49;73.iYear=START_YEAR;74.iMonth=1;75.iDay=1;76.//计算年77.LONGtmp=LunarYearDays(iYear);78.while(iSpanDays>=tmp)79.{80.iSpanDays-=tmp;81.tmp=LunarYearDays(++iYear);82.}83.//计算月84.tmp=LOWORD(LunarMonthDays(iYear,iMonth));85.while(iSpanDays>=tmp)86.{87.iSpanDays-=tmp;88.if(iMonth==GetLeapMonth(iYear))89.{90.tmp=HIWORD(LunarMonthDays(iYear,iMonth));91.if(iSpanDays (WORDiYear,WORDiMonth,WORDiDay,WORD&iLunarYear,WORD&iLunarMonth,WORD&iLunarDay)102.{103.l_CalcLunarDate(iLunarYear,iLunarMonth,iLunarDay,CalcDateDiff(iYear,iMonth,iDay));104.returnl_GetLunarHolDay(iYear,iMonth,iDay);105.}106.//===========================================================================//107.//根据节气数据存储格式,计算 阳历iYear年iMonth月iDay日对应的节气,108.WORDxDate::l_GetLunarHolDay(WORDiYear,WORDiMonth,WORDiDay)109.110.111.{112.BYTE&flag=gLunarHolDay[(iYear-START_YEAR)*12+iMonth-1];113.WORDday;114.if(iDay<15)115.day=15-((flag>>4)&0x0f);116.else117.day=((flag)&0x0f)+15;118.if(iDay==day)119.return(iMonth-1)*2+(iDay>151:0)+1;120.else121.return0;122.}123.//===========================================================================//124.voidxDate::GetDate(WORD &iYear,WORD&iMonth,WORD&iDay)125.{126.iYear=m_iYear;127.iMonth=m_iMonth;128.iDay=m_iDay;129.}130.//===========================================================================//131.BOOLxDate::SetDate(WORD iYear,WORDiMonth,WORDiDay)132.{133.if(iYear iYear,WORDiMonth,WORDiDay)147.{148.//数组元素monthday表示第i个月以前的总天数除以7的余数149.WORDmonthday[]={0,3,3,6,1,4,6,2,5,0,3,5};150.WORDiDays=(iYear-1)%7+(iYear-1)/4-(iYear-1)/100+(iYear-1)/400;151.iDays+=(monthday[iMonth-1]+iDay);152.//如果iYear是闰年153.if(IsLeapYear(iYear)&&iMonth>2)154.iDays++;155.//返回:0,1,2,3,4,5,6表日、一、二、三、四、五、六156.returniDays%7;157.}158.//===========================================================================//159.WORDxDate::MonthDays(WORD iYear,WORDiMonth)160.{161.switch(iMonth)162.{163.case1://一(月)164.case3://三(月)165.case5://五(月)166.case7://七(月)167. case8://八(月)168.case10://十(月)169.case12://十二(月)170.return31;171.172.case4://四(月)173.case6://六(月)174.case9://九(月)175.case11://十一(月) 176.return30;177.178.case2://二(月)179.//如果是闰年180.if(IsLeapYear(iYear))181.return29;182.else183.return28;184.185.}186.return0;187.}188.//===========================================================================//189.WORDxDate::GetLeapMonth (WORDiLunarYear)190.{191.BYTE&flag=gLunarMonth[(iLunarYear-START_YEAR)/2];192.return(iLunarYear-START_YEAR)%2flag&0x0f:flag>>4;193.}194.//===========================================================================//195.LONGxDate::LunarMonthDays (WORDiLunarYear,WORDiLunarMonth)196.{197.if(iLunarYear (WORDiLunarYear)219.{220./*221.WORDdays=348;//12*29222.intmonth=12;223.224.//如果iYear年有闰月,则为13个月225.if(gLanarMonth[iYear-START_YEAR])226.month++;227.228.//如果某月是三十天则days++229.while(month>=0&&(gLanarMonthDay[iYear-START_YEAR]&(1<<(16-month))))230.{231.days++;232.month--;233.}234.returndays;235.*/236.WORDdays=0;237.for(WORDi=1;i<=12;i++)238.{239.LONGtmp=LunarMonthDays(iLunarYear,i);240.days+=HIWORD(tmp);241.days+=LOWORD(tmp);242.}243.returndays;244.}245.//===========================================================================//246.void xDate::FormatLunarYear(WORDiYear,char*pBuffer)247.{248.charszText1[]="甲乙丙丁戊己庚辛壬癸";249.charszText2[]="子丑寅卯辰巳午未申酉戌亥";250.charszText3[]="鼠牛虎免龙蛇马羊猴鸡狗猪";251.252.memcpy(pBuffer,szText1+((iYear-4)%10)*2,2);253.memcpy(pBuffer+2,szText2+((iYear-4)%12)*2,2);254.pBuffer[4]='';255.memcpy(pBuffer+5,szText3+((iYear-4)%12)*2,2);256.strcpy(pBuffer+7,"年");257.}258.//===========================================================================//259.voidxDate::FormatMonth (WORDiMonth,char*pBuffer,BOOLbLunar)260.261.{262.if(!bLunar&&iMonth==1)263.{264.strcpy(pBuffer,"一月");265.return;266.}267.charszText[]="正二三四五六七八九十";268.if(iMonth<=10)269.{270.memcpy(pBuffer,"",2);271.memcpy(pBuffer+2,szText+(iMonth-1)*2,2);272.strcpy(pBuffer+4,"月");273.return;274.}275.if(iMonth==11)276.strcpy(pBuffer,"十一");277.else278.strcpy(pBuffer,"十二");279.strcpy(pBuffer+4,"月");280.281.282.}283.//===========================================================================//284.voidxDate::FormatLunarDay (WORDiDay,char*pBuffer)285.{286.charszText1[]="初十廿三";287.charszText2[]="一二三四五六七八九十";288.if(iDay!=20&&iDay!=30)289.{290.memcpy(pBuffer,szText1+(iDay-1)/10*2,2);291.memcpy(pBuffer+2,szText2+((iDay-1)%10)*2,2);292.pBuffer[4]='/0';293.}294.else295.{296.memcpy(pBuffer,szText1+iDay/10*2,2);297.strcpy(pBuffer+2,szText2+18);298.}299.}300.301.302./******************************************************************************303.下面为阴历计算所需的数据,为节省存储空间,所以采用下面比较变态的存储方法.304.*******************************************************************************/305.//数组gLunarDay存入阴历1901年到2100年每年中的月天数信息,306.//阴历每月只能是29或30天,一年用12(或13)个二进 制位表示,对应位为1表30天,否则为29天307.WORDgLunarMonthDay[]=308.{309.//测试数据只有1901.1.1--2050.12.31310.0X4ae0,0Xa570,0X5268,0Xd260,0Xd950,0X6aa8,0X56a0,0X9ad0, 0X4ae8,0X4ae0,//1910311.0Xa4d8,0Xa4d0,0Xd250,0Xd548,0Xb550,0X56a0,0X96d0,0X95b0,0X49b8,0X49b0, //1920312.0Xa4b0,0Xb258,0X6a50,0X6d40,0Xada8,0X2b60,0X9570,0X4978,0X4970,0X64b0,//1930313. 0Xd4a0,0Xea50,0X6d48,0X5ad0,0X2b60,0X9370,0X92e0,0Xc968,0Xc950,0Xd4a0,//1940314.0Xda50,0Xb550, 0X56a0,0Xaad8,0X25d0,0X92d0,0Xc958,0Xa950,0Xb4a8,0X6ca0,//1950315.0Xb550,0X55a8,0X4da0,0Xa5b0, 0X52b8,0X52b0,0Xa950,0Xe950,0X6aa0,0Xad50,//1960316.0Xab50,0X4b60,0Xa570,0Xa570,0X5260,0Xe930, 0Xd950,0X5aa8,0X56a0,0X96d0,//1970317.0X4ae8,0X4ad0,0Xa4d0,0Xd268,0Xd250,0Xd528,0Xb540,0Xb6a0, 0X96d0,0X95b0,//1980318.0X49b0,0Xa4b8,0Xa4b0,0Xb258,0X6a50,0X6d40,0Xada0,0Xab60,0X9370,0X4978, //1990319.0X4970,0X64b0,0X6a50,0Xea50,0X6b28,0X5ac0,0Xab60,0X9368,0X92e0,0Xc960,//2000320. 0Xd4a8,0Xd4a0,0Xda50,0X5aa8,0X56a0,0Xaad8,0X25d0,0X92d0,0Xc958,0Xa950,//2010321.0Xb4a0,0Xb550, 0Xb550,0X55a8,0X4ba0,0Xa5b0,0X52b8,0X52b0,0Xa930,0X74a8,//2020322.0X6aa0,0Xad50,0X4da8,0X4b60, 0X9570,0Xa4e0,0Xd260,0Xe930,0Xd530,0X5aa0,//2030323.0X6b50,0X96d0,0X4ae8,0X4ad0,0Xa4d0,0Xd258, 0Xd250,0Xd520,0Xdaa0,0Xb5a0,//2040324.0X56d0,0X4ad8,0X49b0,0Xa4b8,0Xa4b0,0Xaa50,0Xb528,0X6d20, 0Xada0,0X55b0,//2050325.326.};327.328.//数组gLanarMonth存放阴历1901年到2050年闰月的月份,如没有则为0,每字节存两年329.BYTEgLunarMonth[]=330.{331.0X00,0X50,0X04,0X00,0X20,//1910332.0X60,0X05,0X00,0X20,0X70,//1920333.0X05,0X00, 0X40,0X02,0X06,//1930334.0X00,0X50,0X03,0X07,0X00,//1940335.0X60,0X04,0X00,0X20,0X70, //1950336.0X05,0X00,0X30,0X80,0X06,//1960337.0X00,0X40,0X03,0X07,0X00,//1970338. 0X50,0X04,0X08,0X00,0X60,//1980339.0X04,0X0a,0X00,0X60,0X05,//1990340.0X00,0X30,0X80, 0X05,0X00,//2000341.0X40,0X02,0X07,0X00,0X50,//2010342.0X04,0X09,0X00,0X60,0X04,//2020 343.0X00,0X20,0X60,0X05,0X00,//2030344.0X30,0Xb0,0X06,0X00,0X50,//2040345.0X02,0X07, 0X00,0X50,0X03//2050346.};347.348.//数组gLanarHoliDay存放每年的二十四节气对应的阳历日期349.//每年的二十四节气对应的阳历日期几乎固定,平均分 布于十二个月中350.//1月2月3月4月5月6月351.//小寒大寒立春 雨水惊蛰春分清明谷雨立夏小满芒种夏至352.//7月8月9月10月11月 12月353.//小暑大暑立秋处暑白露秋分寒露霜降立冬小雪大雪冬至 354./*********************************************************************************355.节气无任何确定规律,所以只好存表,要节省空间,所以....356.下面这种存法实在是太变态了,你就将就着看吧357.**********************************************************************************/358.//数据格式说明:359.//如1901年的节气为360.//1月2月3月4月5月6月7月8月9月 10月11月12月361.//6,21,4,19,6,21,5,21,6,22,6,22,8,23,8,24,8,24,8,24,8,23,8,22 362.//9,6,11,4,9,6,10,6,9,7,9,7,7,8,7,9,7,9,7,9,7,8,7,15363.//上面第一行数据为每 月节气对应日期,15减去每月第一个节气,每月第二个节气减去15得第二行364.//这样每月两个节气对应数据都小于16,每月用一 个字节存放,高位存放第一个节气数据,低位存放365.//第二个节气的数据,可得下表366.367.BYTEgLunarHolDay[]=368.{369.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77,//1901370.0X96,0XA4, 0X96,0X96,0X97,0X87,0X79,0X79,0X79,0X69,0X78,0X78,//1902371.0X96,0XA5,0X87,0X96,0X87,0X87, 0X79,0X69,0X69,0X69,0X78,0X78,//1903372.0X86,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79, 0X78,0X87,//1904373.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77,//1905 374.0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78,//1906375.0X96,0XA5, 0X87,0X96,0X87,0X87,0X79,0X69,0X69,0X69,0X78,0X78,//1907376.0X86,0XA5,0X96,0XA5,0X96,0X97, 0X88,0X78,0X78,0X69,0X78,0X87,//1908377.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69, 0X78,0X77,//1909378.0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78,//1910 379.0X96,0XA5,0X87,0X96,0X87,0X87,0X79,0X69,0X69,0X69,0X78,0X78,//1911380.0X86,0XA5, 0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87,//1912381.0X95,0XB4,0X96,0XA6,0X97,0X97, 0X78,0X79,0X79,0X69,0X78,0X77,//1913382.0X96,0XB4,0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69, 0X78,0X78,//1914383.0X96,0XA5,0X97,0X96,0X97,0X87,0X79,0X79,0X69,0X69,0X78,0X78,//1915 384.0X96,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87,//1916385.0X95,0XB4, 0X96,0XA6,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X87,//1917386.0X96,0XB4,0X96,0XA6,0X97,0X97, 0X79,0X79,0X79,0X69,0X78,0X77,//1918387.0X96,0XA5,0X97,0X96,0X97,0X87,0X79,0X79,0X69,0X69, 0X78,0X78,//1919388.0X96,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87,//1920 389.0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X87,//1921390.0X96,0XB4, 0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X77,//1922391.0X96,0XA4,0X96,0X96,0X97,0X87, 0X79,0X79,0X69,0X69,0X78,0X78,//1923392.0X96,0XA5,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79, 0X77,0X87,//1924393.0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X87,//1925 394.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77,//1926395.0X96,0XA4, 0X96,0X96,0X97,0X87,0X79,0X79,0X79,0X69,0X78,0X78,//1927396.0X96,0XA5,0X96,0XA5,0X96,0X96, 0X88,0X78,0X78,0X78,0X87,0X87,//1928397.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79, 0X77,0X87,//1929398.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77,//1930 399.0X96,0XA4,0X96,0X96,0X97,0X87,0X79,0X79,0X79,0X69,0X78,0X78,//1931400.0X96,0XA5, 0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87,//1932401.0X95,0XB4,0X96,0XA5,0X96,0X97, 0X88,0X78,0X78,0X69,0X78,0X87,//1933402.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69, 0X78,0X77,//1934403.0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78,//1935 404.0X96,0XA5,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87,//1936405.0X95,0XB4, 0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87,//1937406.0X96,0XB4,0X96,0XA6,0X97,0X97, 0X78,0X79,0X79,0X69,0X78,0X77,//1938407.0X96,0XA4,0X96,0X96,0X97,0X97,0X79,0X79,0X79,0X69, 0X78,0X78,//1939408.0X96,0XA5,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87,//1940 409.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87,//1941410.0X96,0XB4, 0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77,//1942411.0X96,0XA4,0X96,0X96,0X97,0X97, 0X79,0X79,0X79,0X69,0X78,0X78,//1943412.0X96,0XA5,0X96,0XA5,0XA6,0X96,0X88,0X78,0X78,0X78, 0X87,0X87,//1944413.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87,//1945 414.0X95,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X78,0X69,0X78,0X77,//1946415.0X96,0XB4, 0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78,//1947416.0X96,0XA5,0XA6,0XA5,0XA6,0X96, 0X88,0X88,0X78,0X78,0X87,0X87,//1948417.0XA5,0XB4,0X96,0XA5,0X96,0X97,0X88,0X79,0X78,0X79, 0X77,0X87,//1949418.0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X69,0X78,0X77,//1950 419.0X96,0XB4,0X96,0XA6,0X97,0X97,0X79,0X79,0X79,0X69,0X78,0X78,//1951420.0X96,0XA5, 0XA6,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87,//1952421.0XA5,0XB4,0X96,0XA5,0X96,0X97, 0X88,0X78,0X78,0X79,0X77,0X87,//1953422.0X95,0XB4,0X96,0XA5,0X96,0X97,0X78,0X79,0X78,0X68, 0X78,0X87,//1954423.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77,//1955 424.0X96,0XA5,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87,//1956425.0XA5,0XB4, 0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87,//1957426.0X95,0XB4,0X96,0XA5,0X96,0X97, 0X88,0X78,0X78,0X69,0X78,0X87,//1958427.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69, 0X78,0X77,//1959428.0X96,0XA4,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78,0X87,0X87,//1960 429.0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87,//1961430.0X96,0XB4, 0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87,//1962431.0X96,0XB4,0X96,0XA6,0X97,0X97, 0X78,0X79,0X79,0X69,0X78,0X77,//1963432.0X96,0XA4,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78, 0X87,0X87,//1964433.0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87,//1965 434.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87,//1966435.0X96,0XB4, 0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77,//1967436.0X96,0XA4,0XA5,0XA5,0XA6,0XA6, 0X88,0X88,0X88,0X78,0X87,0X87,//1968437.0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78, 0X87,0X87,//1969438.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87,//1970 439.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X79,0X69,0X78,0X77,//1971440.0X96,0XA4, 0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87,//1972441.0XA5,0XB5,0X96,0XA5,0XA6,0X96, 0X88,0X78,0X78,0X78,0X87,0X87,//1973442.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69, 0X78,0X87,//1974443.0X96,0XB4,0X96,0XA6,0X97,0X97,0X78,0X79,0X78,0X69,0X78,0X77,//1975 444.0X96,0XA4,0XA5,0XB5,0XA6,0XA6,0X88,0X89,0X88,0X78,0X87,0X87,//1976445.0XA5,0XB4, 0X96,0XA5,0X96,0X96,0X88,0X88,0X78,0X78,0X87,0X87,//1977446.0X95,0XB4,0X96,0XA5,0X96,0X97, 0X88,0X78,0X78,0X79,0X78,0X87,//1978447.0X96,0XB4,0X96,0XA6,0X96,0X97,0X78,0X79,0X78,0X69, 0X78,0X77,//1979448.0X96,0XA4,0XA5,0XB5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87,//1980 449.0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X77,0X87,//1981450.0X95,0XB4, 0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87,//1982451.0X95,0XB4,0X96,0XA5,0X96,0X97, 0X78,0X79,0X78,0X69,0X78,0X77,//1983452.0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78, 0X87,0X87,//1984453.0XA5,0XB4,0XA6,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87,//1985 454.0XA5,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87,//1986455.0X95,0XB4, 0X96,0XA5,0X96,0X97,0X88,0X79,0X78,0X69,0X78,0X87,//1987456.0X96,0XB4,0XA5,0XB5,0XA6,0XA6, 0X87,0X88,0X88,0X78,0X87,0X86,//1988457.0XA5,0XB4,0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78, 0X87,0X87,//1989458.0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X79,0X77,0X87,//1990 459.0X95,0XB4,0X96,0XA5,0X86,0X97,0X88,0X78,0X78,0X69,0X78,0X87,//1991460.0X96,0XB4, 0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86,//1992461.0XA5,0XB3,0XA5,0XA5,0XA6,0X96, 0X88,0X88,0X88,0X78,0X87,0X87,//1993462.0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78, 0X87,0X87,//1994463.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X76,0X78,0X69,0X78,0X87,//1995 464.0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86,//1996465.0XA5,0XB3, 0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87,//1997466.0XA5,0XB4,0X96,0XA5,0X96,0X96, 0X88,0X78,0X78,0X78,0X87,0X87,//1998467.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69, 0X78,0X87,//1999468.0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86,//2000 469.0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87,//2001470.0XA5,0XB4, 0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87,//2002471.0X95,0XB4,0X96,0XA5,0X96,0X97, 0X88,0X78,0X78,0X69,0X78,0X87,//2003472.0X96,0XB4,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78, 0X87,0X86,//2004473.0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87,//2005 474.0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87,//2006475.0X95,0XB4, 0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X69,0X78,0X87,//2007476.0X96,0XB4,0XA5,0XB5,0XA6,0XA6, 0X87,0X88,0X87,0X78,0X87,0X86,//2008477.0XA5,0XB3,0XA5,0XB5,0XA6,0XA6,0X88,0X88,0X88,0X78, 0X87,0X87,//2009478.0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87,//2010 479.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X78,0X87,//2011480.0X96,0XB4, 0XA5,0XB5,0XA5,0XA6,0X87,0X88,0X87,0X78,0X87,0X86,//2012481.0XA5,0XB3,0XA5,0XB5,0XA6,0XA6, 0X87,0X88,0X88,0X78,0X87,0X87,//2013482.0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78, 0X87,0X87,//2014483.0X95,0XB4,0X96,0XA5,0X96,0X97,0X88,0X78,0X78,0X79,0X77,0X87,//2015 484.0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X87,0X88,0X87,0X78,0X87,0X86,//2016485.0XA5,0XC3, 0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X87,//2017486.0XA5,0XB4,0XA6,0XA5,0XA6,0X96, 0X88,0X88,0X78,0X78,0X87,0X87,//2018487.0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X79, 0X77,0X87,//2019488.0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X86,//2020 489.0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86,//2021490.0XA5,0XB4, 0XA5,0XA5,0XA6,0X96,0X88,0X88,0X88,0X78,0X87,0X87,//2022491.0XA5,0XB4,0X96,0XA5,0X96,0X96, 0X88,0X78,0X78,0X79,0X77,0X87,//2023492.0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78, 0X87,0X96,//2024493.0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86,//2025 494.0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87,//2026495.0XA5,0XB4, 0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87,//2027496.0X95,0XB4,0XA5,0XB4,0XA5,0XA6, 0X97,0X87,0X87,0X78,0X87,0X96,//2028497.0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78, 0X87,0X86,//2029498.0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87,//2030 499.0XA5,0XB4,0X96,0XA5,0X96,0X96,0X88,0X78,0X78,0X78,0X87,0X87,//2031500.0X95,0XB4, 0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X96,//2032501.0XA5,0XC3,0XA5,0XB5,0XA6,0XA6, 0X88,0X88,0X88,0X78,0X87,0X86,//2033502.0XA5,0XB3,0XA5,0XA5,0XA6,0XA6,0X88,0X78,0X88,0X78, 0X87,0X87,//2034503.0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87,//2035 504.0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X96,//2036505.0XA5,0XC3, 0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X86,//2037506.0XA5,0XB3,0XA5,0XA5,0XA6,0XA6, 0X88,0X88,0X88,0X78,0X87,0X87,//2038507.0XA5,0XB4,0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78, 0X87,0X87,//2039508.0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X78,0X87,0X96,//2040 509.0XA5,0XC3,0XA5,0XB5,0XA5,0XA6,0X87,0X88,0X87,0X78,0X87,0X86,//2041510.0XA5,0XB3, 0XA5,0XB5,0XA6,0XA6,0X88,0X88,0X88,0X78,0X87,0X87,//2042511.0XA5,0XB4,0X96,0XA5,0XA6,0X96, 0X88,0X88,0X78,0X78,0X87,0X87,//2043512.0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0X97,0X87,0X87,0X88, 0X87,0X96,//2044513.0XA5,0XC3,0XA5,0XB4,0XA5,0XA6,0X87,0X88,0X87,0X78,0X87,0X86,//2045 514.0XA5,0XB3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X88,0X78,0X87,0X87,//2046515.0XA5,0XB4, 0X96,0XA5,0XA6,0X96,0X88,0X88,0X78,0X78,0X87,0X87,//2047516.0X95,0XB4,0XA5,0XB4,0XA5,0XA5, 0X97,0X87,0X87,0X88,0X86,0X96,//2048517.0XA4,0XC3,0XA5,0XA5,0XA5,0XA6,0X97,0X87,0X87,0X78, 0X87,0X86,//2049518.0XA5,0XC3,0XA5,0XB5,0XA6,0XA6,0X87,0X88,0X78,0X78,0X87,0X87//2050 519.520.};(感谢baickl) 七、C语言(1): -1921)/4+wCurDay+wMonthAdd[wCurMonth-1]-38;45.if((!(wCurYear%4))&&(wCurMonth>2))46.nTheDate=nTheDate+1;47.48./*--计算农历天干、地支、月、日---*/49.nIsEnd=0;50.m=0;51.while(nIsEnd!=1)52.{53.if(wNongliData[m]<4095)54.k=11;55.else56.k=12;57.n=k;58.while(n>=0)59.{60.//获取wNongliData(m)的第n个二进制位的值61.nBit=wNongliData[m];62.for(i=1;i 12]);93.wsprintf(szNongli,"%s(%s%s)年",szShuXiang,cTianGan[((wCurYear-4)%60)%10],cDiZhi[((wCurYear-4)%60)% 12]);94.95./*--生成农历月、日==>wNongliDay--*/96.if(wCurMonth<1)97.wsprintf(szNongliDay,"闰%s",cMonName[-1*wCurMonth]);98.else99.strcpy(szNongliDay,cMonName[wCurMonth]);100.101.strcat(szNongliDay,"月");102.strcat(szNongliDay,cDayName[wCurDay]);103.returnstrcat(szNongli,szNongliDay);104.}(感谢CSDN作者3661512)