农历天干地支算法源代码大全(javascriptvbscriptC#flashC++C等等转破阵子.如是我闻

原来还准备自己写算法,并研究农历规则。发现那太难和麻烦了,光是农历的推算那就我等专门研究历法的人一下搞懂的。后来发现

下。实现了公历农历转换的功能。但是只能算到1900~2100年之间的。基本够日常使用了。源代码如下:

///11.classChinaDateTime12.{13.privateintyear,month,dayOfMonth;14.privateboolisLeap;15.publicDateTimetime;16.17.////

18.///获取当前日期的农历年19.///20.publicint

Year21.{22.get{returnyear;}23.}24.25.////

26.///获取当前日期的农历月份27.///28.publicint

Month29.{30.get{returnmonth;}31.}32.33.////

34.///获取当前日期的农历月中天数35.///36.public

intDayOfMonth37.{38.get{returndayOfMonth;}39.}40.41.////

42.///获取当前日期是否为闰月中的日期43.///44.

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.////

70.///返回当前日前的农历日期。71.///72.public

80.///81.///82.///

83.///84.publicChinaDateTime(int

publicDateTimeToDateTime()108.{109.returncc.ToDateTime(year,isLeapmonth+1:month,dayOfMonth,time.Hour,time.Minute,

///116.///117.publicstaticDateTimeToDateTime

///126.///127.publicstaticChinaDateTime

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='';188.return(cl+festival+'');189.}190.functionsetCalendar(){191.document.write('

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.//#include4.5.6.externWORDgLunarMonthDay[];7.externBYTEgLunarMonth[];8.externBYTEgLunarHolDay[];9.10.constWORDSTART_YEAR=1901;11.constWORDEND_YEAR=2050;12.//===========================================================================//13.voidxDate::l_InitData()14.{15.SYSTEMTIMEsystime;16.::GetSystemTime(&systime);17.18.m_iYear=systime.wYear;19.m_iMonth=systime.wMonth;20.m_iDay=systime.wDay;21.}22.//===========================================================================//23.xDate::xDate(WORDiYear,WORD

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(iYearEND_YEAR||iMonth<1||iMonth>12)134.returnFALSE;135.136.if(iDay<1||iDay>MonthDays(iYear,iMonth))137.returnFALSE;138.139.m_iYear=iYear;140.m_iMonth=iMonth;141.m_iDay=iDay;142.143.returnTRUE;144.}145.//===========================================================================//146.WORDxDate::WeekDay(WORD

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(iLunarYearGetLeapMonth(iLunarYear)&&GetLeapMonth(iLunarYear))204.iBit--;205.206.if(gLunarMonthDay[iLunarYear-START_YEAR]&(1<

(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;iwNongliData[m]/65536+1)88.wCurMonth=wCurMonth-1;89.}90.91./*--生成农历天干、地支、属相==>wNongli--*/92.wsprintf(szShuXiang,"%s",cShuXiang[((wCurYear-4)%60)%

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)

THE END
1.天干地支纪年法介绍3、历法用天干、地支编排年号和日期,天干共十个字,因此又称为「十干」,其排列顺序为:甲、乙、丙、丁、戊、己、庚、辛、壬、癸;地支共十二个字,排列顺序为:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。其中甲、丙、戊、庚、壬为阳干,乙、丁、己、辛、癸为阴干。子、寅、辰、午、申、戌为http://m.15tql.com/zixun-2044888/
2.农历天干地支纪年法,农历干支纪年法怎么推算具体日期农历天干地支纪年法,是传统的时间计算法之一,被广泛用于民间日常生活以及农业等方面。 天干地支纪年法的起源可以追溯到古代的黄帝时期,当时天干地支的概念已经被人们广泛运用。到了汉代,人们将天干地支与日、月、星辰等天文现象联系起来,形成了以天干地支为基础的纪年法。 http://www.wenbuju.cn/bazi/434267.html
3.2020年每日干支日期表,2020全年日期对应的天干地支纪年!2020年1月阳历、阴历、干支历日期对照表 公历日期 农历日期 干支日期 1月 1日 腊月初七 癸卯日 1月 2日 腊月初八 甲辰日 1月 3日 腊月初九 乙巳日 1月 4日 腊月初十 丙午日 1月 5日 腊月十一 丁未日 1月 6日 腊月十二 戊申日 1月 7日 腊月十三 己酉日 1月 8日 腊月十四 庚戌日 1月 9日 腊月https://m.douban.com/note/747048948/
4.今日农历天干地支查询快速获取当前日期的干支组合!–手机爱问天干地支是按照十天干和十二地支的循环组合表示时间。 如何查询今日农历天干地支 要查询今日农历天干地支,可以通过下面的步骤: 确定当前的公历日期。 根据公历日期计算农历日期。 查找农历日期对应的天干地支。 快速获取当前日期的干支组合 为了方便查询,可以使用计算机程序或在线工具来快速获取当前日期的天干地支组合。 总结https://m.iask.sina.com.cn/mib/new1ztdJbJWlZHt.html
5.万年历天干地支查询表天干地支日期计算器天干地支对照表 农历干支查询(最好最全的万年历),万年历干支查询(万年历日干支查询)万年历,例如甲子乙丑丙丁依次组合,万年历金木水火土五行查询表万年历老黄历金木水火土。 推算日干支所在的月份是七月干、地支都加一,公历农历干地支都可以一起查到希望对你有帮助万年历干地支表查询1987年5月13日。 https://www.16757.com/ysh/huangli/1287.html
6.农历年份对照表中国农历年天干地支排列表 十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戍、亥 1999年1月9日 农历是几月几日出生年份对照表 农历十一月十二 农历表除年份多少年一轮 六十年 公元一九二九年十二月日历阳历阴历对照表 https://www.lishixinzhi.com/bb/327522.html
7.生辰八字天干地支查询八字天干地支查询免费月柱:出生月份对应的天干地支,代表个人的情感、偏好和行为方式。月柱的天干反映出个人的情绪性格和思维方式,地支则表现出个人的社交关系。 日柱:出生日期对应的天干地支,代表个人的能力、运气和个性特点。日柱的天干决定了个人的才华和天赋,地支则影响了个人的运势。 http://www.8882088.com/baziganzhi/
8.中国农历的天干地支澹沈19154126246》天干地支指的是什么 - 年畅1036……》 天干地支,简称“干支”.在中国古代的历法中,甲、乙、丙、丁、戊、己、庚、辛、壬、癸被称为“十天干”,子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥叫作“十二地支”.十干和十二支依次相配,组成六十个基本单位,两者按固定的顺序互相配合,组成https://www.da-quan.net/ti/%E4%B8%AD%E5%9B%BD%E5%86%9C%E5%8E%86%E7%9A%84%E5%A4%A9%E5%B9%B2%E5%9C%B0%E6%94%AF/
9.C#农历日期时间类(包括天干地支,节气)之前写了个小倒计时工具,用到了农历日期的转换,后来想想直接封装个类得了,以后用起来也方便,像国人的生日大多也都是农历来算的。于是研究了下农历的规则,结合了网上的一些算法,封装了下面的类(ChineseDateTime)。主要用到的是.Net类库中的农历类System.Globalization.ChineseLunisolarCalendar(公元纪年与中国传统https://www.jianshu.com/p/de33e6d9d880
10.四中国农历——干支历同农历纪法一样,每60年一个周期,循环往复。可以通过万年历法获得,也可以自己推算。只要记住公元1984年2月4日立春,立春以后是甲子年,就可以进行推算。例如,1984年到2022年又经过了38年,天干地支排序第39位是壬寅,故2022年2月4日立春以后是壬寅年。公元4年2月6日立春,立春以后是甲子年,也可以作为参照,方便推出https://www.meipian.cn/2ll5x9cy
11.12时辰对应天干地支13877749470:时辰对照表天干地支 员红时辰对照表天干地支3 我们需要了解,现代使用的是北京时间,以晚上12点为分界线。但在算命学中,时间不是按照北京时间来划分的。古代以子时为一天的开始,即晚上11点开始属于第二天。例如,公历2003年8月6日23:20对应农历2003年7月10日23:20,按古法,这个时间出生的人是农历2003年https://www.xkyn.com/na/wsndbdfehwbnrwwansb.htm
12.农历·阴历·阳历·干支历——历法知识大科普!你的生肖弄清楚了吗?根据我国古文献文记载天皇氏时代已发明干支,这一发明影响深远,后世用于历法、术数、计算、命名等各方面。它以立春为岁首,交节日为月首。干支历通过天干地支论若干恒星、太阳与地球的关系,当命理师问你的出生年月日时,其实是确定你出生在“立春”前还是后,进而确定生肖属相。 https://weibo.com/ttarticle/p/show?id=2309404600877217612045
13.公历农历转换又根据太阳的位置,把一个太阳年分成二十四个节气,以利于农业种植等活动。纪年用天干地支搭配,六十年周而复始。这种历法相传创始于夏代,所以又称为夏历。也叫旧历。 人们因为二十四节气对于农业生产有重要意义,因而常把夏历称为“农历”,但二十四节气应根据太阳在黄道上的位置而决定,应该属于太阳历部分。因此把夏历称https://gonglinongli.bmcx.com/
14.android获取农历日期和天干地支andorid年份转天干地支这个Java代码实现了在Android中获取农历日期及对应的天干地支的方法。通过Luar类,可以计算出指定年月日的农历日期、是否为闰月、农历年份的天数等信息,并能以中文格式输出日期。 摘要由CSDN通过智能技术生成 package nongli; import java.util.Calendar; import java.util.Date; https://blog.csdn.net/cheweilol/article/details/50534837
15.十二生肖天干地支表十天干对应的生肖为:五行属木:甲乙寅卯对应生肖属虎属兔;五行属火:丙丁巳午对应生肖属蛇属马;五行属土:戊己辰戌丑未对应生肖龙狗牛羊;五行属金:庚辛申酉对应生肖属猴属鸡;五行属水:壬癸亥子对应生肖属鼠属猪。 我们如今通用的阴历或者农历,其实也就是夏历。夏历就是用十大天干、十二地支编排年号以及日期所得https://www.zgjm.org/shengxiao/zhishi/151132.html
16.老黄历查天干地支,查天干地支的万年历老黄历是一种古老的农历工具,通过查天干地支来预测吉凶祸福。天干地支是中国古代的一种时间记号系统,由十天干和十二地支组成。天干包括甲、乙、丙、丁、戊、己、庚、辛、壬、癸,地支包括子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。天干地支的组合共有六十种,每一种组合对应着不同的年、月、日、时https://www.tit521.com/a/3754.html