农历天干地支算法源代码大全(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.天干地支算命八字,即生辰八字,是一个人出生时的干支历日期。八字在中国民俗信仰中占有地位,年干和年支组成年柱,月干和月支组成月柱,日干和日支组成日柱,时干和时支组成时柱;一共四柱,四个干和四个支共八个字,故又称四柱八字。 十天干如何算命 1、十天干 甲、乙、丙、丁、戊、己、庚、辛、壬、癸。 https://www.dubeike.com/wiki-77213.html
2.八字里天干地支怎么看要了解自己的八字天干地支,你需要知道自己的出生年月日时,然后通过网络工具如“元亨利贞八字排盘”进行计算。例如,如果一个女孩1984年8月6日晚9点出生,她的八字会是戊戌己未庚午丁亥,表示出生在特定的天干地支组合中。至于具体如何计算,年、月、日、时的天干地支各有其推算法。年干支可以通过公元。 https://www.shunyuantang-cn.com/view/6822025.html
3.日柱干支演算法日柱干支演算法 例:计算3456年7月8日的干支 ①(56-1)÷4=13……3取商13 ②(56-1)÷12=4……7取余数7×5=35 ③经计算3400--3499年基数为19 ①+②+③=13+35+19=67 67-60=7 7+0(单月加零)+1(调节数)+1(闰年)+8(日期)=17 https://www.meipian.cn/u75mlwz
4.四柱八字中日柱的算法,十二时辰要注意,并非以晚十二点为限日柱,即用农历干支代表人出生的那一天。干支日每六十天一循环。由于大小月、平闰年的不同缘故,日干支需查找万年历。民间有些用八字推命的盲人则有简便的日诀推出日干支。 日柱,在命学上是以晚上子时开始顺时针到亥时,十二个时辰为一天,每一个时辰占两个钟点。日与日的分界线是以子时来划分的,即晚上的十一点https://m.wang1314.com/doc/webapp/topic/20982558.html
5.日柱公式是什么日柱干支推算口诀“日柱公式”指的是用来换算公历日期与日干支的一种历法公式。 目前,人们普遍使用的公历也就是格里历,是一种太阳历。我国过去使用的干支历也是一种太阳历,为了方便进行八字推算,所以需要一种能够将常用的公历转换成干支历的方法,因此就产生了日柱公式。 https://www.k366.com/bazi/193937.htm
6.最简单日柱推算法怎么看自己的日柱公式推算口诀最简便计算方法日柱指的是我们农历干支出生的那一天,通过日柱我们可以看出自己命运的轨迹和走向,从风水学上来讲日柱是八字算命中举足轻重的一部分,那么如何知道自己的日柱呢?通过本期的四柱预测,给大家介绍一种最简便的推算口诀和日柱计算方法。 口诀: 乘五除四九加日,双月间隔三十天。一二自加整少一,三五七八十尾前。 https://blog.csdn.net/weixin_39820177/article/details/109883399
7.四柱哪一柱对人影响最大,正确的日柱推算法三、正确的日柱推算法 在中国传统历法中,日柱是指农历的干支纪日法,它是用来代表人出生的那一天,同时也是八字算命中的一个概念。日柱的推算涉及到公历或农历的转换,以及对闰年和平年的不同处理。以下是几种不同的日柱推算法: 公历转农历日柱 方法一:使用日柱推算表 https://www.lbzuo.com/wap_doc/28525439.html
8.易经八字推算日柱,日柱的天干地支怎么算日干支从《万年历》中查得。用阴阳干来推算日柱干支。需说明的是:一天是从头天晚11时起至今晚11时为今日,即子时为日的分界线。例:1998年农历7月12日23时10分出生人的年月日干支为:戊寅、庚申、癸丑。 日柱公式: 日干支序数=年数+月数+日期 (和大于60,则减60。1月、2月用上一年的年数) http://www.perfectmusic.cn/youxi/61s56/
9.天干地支纪年法天干地支纪年法同时可纪年、月、日、时,分别称为“年柱、月柱、日柱、时柱”。此八个字就是俗称的“八字”。一个人的八字就是他出生时间的四柱记录。关于月、日、时的天干地支纪法,已使用不多,有兴趣的读者可去查阅有关资料。 四、干支公元对照表 https://www.liuxue86.com/a/3657707.html
10.简单的日干推算方法,怎样最简单推算日干支干同支冲退一天。(三月元旦同一天)日的天干地支算法。 余年二月二十八, 干同支冲退一天。 月首十三二十五,日柱看天干还是地支确定属性。 支同隔干一位算。 如何推算日的天干地支? 意解:“元旦干支为根源,大小二月记心间。”推算公历日干支,首先要记住元旦日的干支。同时,还要知道大小月及二月的天数。公历大月为http://www.ja-auction.com/sm/407250x/
11.天干地支纪年法怎么算?需要注意哪些细节装修问答兹将搬屋选择吉日良辰之要点简述有这些:(一)迁移(搬屋)的日子不可与家人的「生肖」及「日柱」(农历https://ask.zx123.cn/show-261479.html