文章提供计算农历天干地支及当年属相的算法源程序,使用的语言为Javascript、VBScript、C#等。

一、C# 代码(1):

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

。NET类库也提供一些基础的农历类System.Globalization.ChineseLunisolarCalendar。我改装了一下如DateTime时间形式。代码如

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

1.using System;

2.using System.Collections.Generic;

3.using System.Text;

4.5.namespace System

6.{

7.   8.    /// 中国常用农历日期时间类 9.    /// zj53hao@qq.com   http://hi.csdn.net/zj53hao 10.

/// 11.    class ChinaDateTime

12.    {

13.        private int year, month, dayOfMonth;

14.        private bool isLeap;

15.        public DateTime time;

16.17.        18.        /// 获取当前日期的农历年 19.        /// 20.        public int

Year

21.        {

22.            get { return year; }

23.        }

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

Month

29.        {

30.            get { return month; }

31.        }

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

int DayOfMonth

37.        {

38.            get { return dayOfMonth; }

39.        }

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

public bool IsLeap

45.        {

46.            get { return isLeap; }

47.        }

48.49.        System.Globalization.ChineseLunisolarCalendar cc;

50.        51.        /// 返回指定公历日期的阴历时间 52.        /// 53.        ///

name="time"> 54.        public ChinaDateTime(DateTime time)

55.        {

56.            cc = new System.Globalization.ChineseLunisolarCalendar();

57.

58.             if (time > cc.MaxSupportedDateTime || time < cc.MinSupportedDateTime)

59.                throw new Exception("参数日期时间不在支持的范围内,支持范围:" +

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

static ChinaDateTime Now

73.        {

74.            get { return new ChinaDateTime(DateTime.Now); }

75.        }

76.77.        78.        /// 返回指定农历年,月,日,是否为闰月的农历日期时间 79.        ///

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

83.        /// 84.        public ChinaDateTime(int

Year, int Month, int DayOfMonth, bool IsLeap)

85.        {

86.            if (Year >= cc.MaxSupportedDateTime.Year || Year <= cc.MinSupportedDateTime.Year)

87.                throw new Exception("参数年份时间不在支持的范围内,支持范围:" +

cc.MinSupportedDateTime.ToShortDateString() + "到" + cc.MaxSupportedDateTime.ToShortDateString());

88.89.            if (Month < 1 || Month > 12)

90.                throw new Exception("月份必须在1~12范围");

91.            cc = new System.Globalization.ChineseLunisolarCalendar();

92.

93.            if(cc.GetLeapMonth(Year)!=Month&&IsLeap)

94.                throw new Exception("指定的月份不是当年的闰月");

95.            if (cc.GetDaysInMonth(Year, IsLeap ? Month + 1 : Month) < DayOfMonth || DayOfMonth < 1)

96.                throw new Exception("指定的月中的天数不在当前月天数有效范围");

97.            year = Year;

98.            month = Month;

99.            dayOfMonth = DayOfMonth;

100.            isLeap = IsLeap;

101.            time = DateTime.Now;

102.        }

103.104.        105.        /// 获取当前农历日期的公历时间 106.        /// 107.

public DateTime ToDateTime()

108.        {

109.            return cc.ToDateTime(year, isLeap ? month + 1 : month, dayOfMonth, time.Hour, time.Minute,

time.Second, time.Millisecond);

110.        }

111.112.        113.        /// 获取指定农历时间对应的公历时间 114.        /// 115.

/// 116.        /// 117.        public static DateTime ToDateTime

(ChinaDateTime CnTime)

118.        {

119.            return CnTime.ToDateTime();

120.        }

121.122.        123.        /// 获取指定公历时间转换为农历时间 124.        /// 125.

/// 126.        /// 127.        public static ChinaDateTime

ToChinaDateTime(DateTime Time)

128.        {

129.            return new ChinaDateTime(Time);

130.        }

131.   }

132.}

二、C#代码(2):

1、农历类的使用

.net框架不支持直接将日期转换成农历格式的字符串,那么要将显示农历格式的日期,就只要自已写代码了。不过由于已经有了

ChineseLunisolarCalendar类实现了公历转换为农历日期的功能,所以要写这样的代码也比较简单。需要用到

ChineseLunisolarCalendar以下几个主要方法:

int GetYear (DateTime time) 获取指定公历日期的农历年份,使用的还是公历纪元。在每年的元旦之后春节之前农历的纪年会比公

历小1,其它时候等于公历纪年。虽然农历使用传说中的耶稣生日纪元似乎不太妥当,不过我们确实已经几十年没有实行一个更好的纪

年办法,也只有将就了。

int GetMonth (DateTime time) 获取指定公历日期的农历月份。这里要注意了,由于农历有接近三分之一的年份存在闰月,则在这

些年份里会有十三个,而具体哪一个月是闰月也说不准,这里不同于希伯来历。以今年为例,今年闰七月,则此方法在参数为闰七月

的日期是返回值为 8,参数为农历十二月的日期时返回值为13

bool IsLeapMonth ( int year,   int month) 获取指定农历年份和月份是否为闰月,这个函数和上个函数配合使用就可以算出农历

的月份了。

int GetDayOfMonth (DateTime time) 获取指定公历日期的农历天数,这个值根据大月或者小月取值是1到30或者1到29, MSDN上说的

1到31显然是错的, 没有哪个农历月份会有31天。

int GetSexagenaryYear (DateTime time) 获取指定公历日期的农历年份的干支纪年,从1到60,分别是甲子、乙丑、丙寅、….癸亥

, 比如戊戌变法、辛亥革命就是按这个来命名的。当然算八字也少不了这个。

int GetCelestialStem (int sexagenaryYear) 获取一个天支的天干, 从1到10, 表示甲、乙、丙….,说白了就是对10取模。

int GetTerrestrialBranch (int sexagenaryYear) ) 获取一个干支的地支,, 从1到12, 表示子、丑、寅、…今年是狗年,那么今

年年份的地支就是“戌”。

有了这几个方法,显示某天的农历月份日期、农历节日等都是小菜一碟,算命先生排八字用这几个方法,又快又准确,写出的代码也

很短。

2、几种东亚农历类的区别

经过我的测试,ChineseLunisolarCalendar, JapaneseLunisolarCalendar, KoreanLunisolaCalendarr, TaiwanLunisolarCalendar

这四种日历,无论哪一种,以2006年2月6日为参数,调用它们的GetMonth方法得到的结果都是1,GetDayOfMonth得到的结果都是8。

想想也是,我们过的端午节和韩国的不太可能不是一天。

但是调用GetYear方法得到结果就有区别了ChineseLunisolarCalendar和KoreanLunisolarCalendar都返回2006,也就是公历纪年,

TaiwanLunisolarCalendar的返回值是95,依然是民国纪年,JapaneseLunisolarCalendar的返回值是18, 平成纪年。

另外的一个区别是这四种日历的MinSupportedDateTime和MaxSupportedDateTime各不一样,以下是对照表:

日历类 MinSupportedDateTime MaxSupportedDateTime

ChineseLunisolarCalendar 公元1901年1月初1 公元2100年12月29

TaiwanLunisolarCalendar 民国1年1月初1 民国139年12月29

JapaneseLunisolarCalendar 昭和35年1月初1 平成61年12月29

KoreanLunisolarCalendar 公元918年1月初1 公元2050年12月29

韩国农历类支持的最小日期为918年(也即高丽王朝建立的年份),以此而论,中国农历类支持的最小日期不说从商周算起,从汉唐算

总该没问题吧?微软公司啊,又在“厚彼薄此”,唉。

其次,日本还以天皇纪年,如果哪天xxxx, 岂不是使用JapaneseLunisolarCalendar写出的程序都有问题啦?

3、写自已的日期格式化器

昨天看了一篇文章,说目前大家用的“农历”这个术语是文革时期才有的,目的是反封建。这里为了省事,还是继续使用这个术语。

而英文名称ChineseLunisolarCalendar太长,我自己的代码中就用ChineseCalendar为相关功能命名,这个名字也还过得去吧。

我原先设想自定义一个类,使得能写出这样的代码:

string s= DateTime.Now.ToString(new MyFormatProvider());

就能得出我想要的农历日期字符串,经过测试却失败了,依据我的分析,微软公司在.net框架中把日期时间型的格式写死了,只能依

据相关的地区采用固定的几种显示格式,没法再自行定义。而前文已经说过,而所有的相关格式微软公司都放到一个名为

culture.nlp的文件中(这个文件在以前的.net框架是一个独立的文件,在.net 2.0被作为一个资源编译到mscorlib.dll中。) (我的

这个不能为DateTime写自已的格式化器的观点没有资料佐证,如有不当之处,请大家指正)

虽然不能为DataTime写自定义的格式器,但还有另外一个途径,就是为String类的Format方法写自定义格式化器,我测试了一下,效

果还不错,调用方式如下:

string s= String.Format(new ChineseCalendarFormatter(), "{0:D}",DateTime.Now);

可以得到“二〇〇六年正月初九”

string s= String.Format(new ChineseCalendarFormatter(), "{0:d}",DateTime.Now);

可以得到“丙戌年正月初九”

虽然没有前面所设想的方便,但也还能接受,全部代码帖出如下:

第一个类,主要是封装了农历的一些常用字符和对日历处理的最基本功能

1.using System;

2.using System.Collections.Generic;

3.using System.Text;

4.5.using System.Globalization;

6.7.public static class ChineseCalendarHelper

8.{

9.    public static string GetYear(DateTime time)

10.    {

11.        StringBuilder sb = new StringBuilder();

12.        int year = calendar.GetYear(time);

13.        int d;

14.        do15.        {

16.            d = year % 10;

17.            sb.Insert(0, ChineseNumber[d]);

18.            year = year / 10;

19.        } while (year > 0);

20.        return sb.ToString();

21.    }

22.23.    public static string GetMonth(DateTime time)

24.    {

25.        int month = calendar.GetMonth(time);

26.        int year = calendar.GetYear(time);

27.        int leap = 0;

28.29.        //正月不可能闰月 30.        for (int i = 3; i <= month; i++)

31.        {

32.            if (calendar.IsLeapMonth(year, i))

33.            {

34.                leap = i;

35.                break;  //一年中最多有一个闰月 36.            }

37.38.        }

39.        if (leap > 0) month--;

40.        return (leap == month + 1 ? "闰" : "") + ChineseMonthName[month - 1];

41.    }

42.43.    public static string GetDay(DateTime time)

44.    {

45.        return ChineseDayName[calendar.GetDayOfMonth(time) - 1];

46.    }

47.48.    public static string GetStemBranch(DateTime time)

49.    {

50.        int sexagenaryYear = calendar.GetSexagenaryYear(time);

51.        string stemBranch = CelestialStem.Substring(sexagenaryYear % 10 - 1, 1) +

52.                      TerrestrialBranch.Substring(sexagenaryYear % 12 - 1, 1);

53.        return stemBranch;

54.    }

55.56.    private static ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();

57.    private static string ChineseNumber = "〇一二三四五六七八九";

58.    public const string CelestialStem = "甲乙丙丁戊己庚辛壬癸";

59.    public const string TerrestrialBranch = "子丑寅卯辰巳午未申酉戌亥";

60.    public static readonly string[] ChineseDayName = new string[] {

61.            "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",

62.            "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",

63.            "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};

64.    public static readonly string[] ChineseMonthName = new string[]

65.           { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };

66.}

第二个类为自定义格式化器:

1.using System;

2.using System.Collections.Generic;

3.using System.Text;

4.5.using System.Globalization;

6.using System.Threading;

7.8.public class ChineseCalendarFormatter : IFormatProvider, ICustomFormatter

9.{

10.    //实现IFormatProvider 11.    public object GetFormat(Type formatType)

12.    {

13.        if (formatType == typeof(ICustomFormatter))

14.            return this;

15.        else16.            return Thread.CurrentThread.CurrentCulture.GetFormat(formatType);

17.    }

18.19.    //实现ICustomFormatter 20.    public string Format(string format, object arg, IFormatProvider

formatProvider)

21.    {

22.        string s;

23.        IFormattable formattable = arg as IFormattable;

24.        if (formattable == null)

25.            s = arg.ToString();

26.        else27.            s = formattable.ToString(format, formatProvider);

28.        if (arg.GetType() == typeof(DateTime))

29.        {

30.            DateTime time = (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.        return s;

60.    }

61.}

这段代码中间处理格式那部份稍做改进,就可以支持更多的日期格式。

有了这两段代码为原型,要实现计算和显示一个日期的农历日期及其它功能,基本上就很容易了。

三、VBScript 代码:

1.

2.'Wonsoft, Welcome to visit my web http://wonsoft.cn

3.'***********************************************

4.' 类名称:ChinaDay

5.' 用途:

6.' 根据输入的日期计算该日期的农历天干地支及当年属相

7.' 使用方法:

8.' 第一个参数为输入参数,不填写默认为当日,

9.' 只计算1921-2-8之后的日期

10.' ##-------------------------------------------##

11.' Dim objChinaDay

12.' Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni

13.' Set objChinaDay = New ChinaDay

14.' Call objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)

15.' Response.Write sDay&"
"

16.' Response.Write sWeekDay&"
"

17.' Response.Write sChinaYear&"
"

18.' Response.Write sChinaDay&"
"

19.' Response.Write sChinaAni&"
"

20.' ##-------------------------------------------##

21.' Copyright: 本代码非原创,是2001年收集的,原作者未知。

22.' License:Free

23.'*******************************************************

24.Class ChinaDay

25.26.Dim arrWeekName(7), MonthAdd(11), NongliData(99)

27.Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12)

28.Dim curTime, curYear, curMonth, curDay, curWeekday

29.Dim i, m, n, k, isEnd, bit, TheDate

30.31.'初始化数据

32.Sub Class_Initialize()

33.'---------------------------------------------------

34.'定义显示字串

35.36.'星期名

37.arrWeekName(0) = "*"

38.arrWeekName(1) = "星期日"

39.arrWeekName(2) = "星期一"

40.arrWeekName(3) = "星期二"

41.arrWeekName(4) = "星期三"

42.arrWeekName(5) = "星期四"

43.arrWeekName(6) = "星期五"

44.arrWeekName(7) = "星期六"

45.46.'天干名称

47.arrTianGan(0) = "甲"

48.arrTianGan(1) = "乙"

49.arrTianGan(2) = "丙"

50.arrTianGan(3) = "丁"

51.arrTianGan(4) = "戊"

52.arrTianGan(5) = "己"

53.arrTianGan(6) = "庚"

54.arrTianGan(7) = "辛"

55.arrTianGan(8) = "壬"

56.arrTianGan(9) = "癸"

57.58.'地支名称

59.arrDiZhi(0) = "子"

60.arrDiZhi(1) = "丑"

61.arrDiZhi(2) = "寅"

62.arrDiZhi(3) = "卯"

63.arrDiZhi(4) = "辰"

64.arrDiZhi(5) = "巳"

65.arrDiZhi(6) = "午"

66.arrDiZhi(7) = "未"

67.arrDiZhi(8) = "申"

68.arrDiZhi(9) = "酉"

69.arrDiZhi(10) = "戌"

70.arrDiZhi(11) = "亥"

71.72.'属相名称

73.arrShuXiang(0) = "鼠"

74.arrShuXiang(1) = "牛"

75.arrShuXiang(2) = "虎"

76.arrShuXiang(3) = "兔"

77.arrShuXiang(4) = "龙"

78.arrShuXiang(5) = "蛇"

79.arrShuXiang(6) = "马"

80.arrShuXiang(7) = "羊"

81.arrShuXiang(8) = "猴"

82.arrShuXiang(9) = "鸡"

83.arrShuXiang(10) = "狗"

84.arrShuXiang(11) = "猪"

85.86.'农历日期名

87.arrDayName(0) = "*"

88.arrDayName(1) = "初一"

89.arrDayName(2) = "初二"

90.arrDayName(3) = "初三"

91.arrDayName(4) = "初四"

92.arrDayName(5) = "初五"

93.arrDayName(6) = "初六"

94.arrDayName(7) = "初七"

95.arrDayName(8) = "初八"

96.arrDayName(9) = "初九"

97.arrDayName(10) = "初十"

98.arrDayName(11) = "十一"

99.arrDayName(12) = "十二"

100.arrDayName(13) = "十三"

101.arrDayName(14) = "十四"

102.arrDayName(15) = "十五"

103.arrDayName(16) = "十六"

104.arrDayName(17) = "十七"

105.arrDayName(18) = "十八"

106.arrDayName(19) = "十九"

107.arrDayName(20) = "二十"

108.arrDayName(21) = "廿一"

109.arrDayName(22) = "廿二"

110.arrDayName(23) = "廿三"

111.arrDayName(24) = "廿四"

112.arrDayName(25) = "廿五"

113.arrDayName(26) = "廿六"

114.arrDayName(27) = "廿七"

115.arrDayName(28) = "廿八"

116.arrDayName(29) = "廿九"

117.arrDayName(30) = "三十"

118.119.'农历月份名

120.arrMonName(0) = "*"

121.arrMonName(1) = "正"

122.arrMonName(2) = "二"

123.arrMonName(3) = "三"

124.arrMonName(4) = "四"

125.arrMonName(5) = "五"

126.arrMonName(6) = "六"

127.arrMonName(7) = "七"

128.arrMonName(8) = "八"

129.arrMonName(9) = "九"

130.arrMonName(10) = "十"

131.arrMonName(11) = "十一"

132.arrMonName(12) = "腊"

133.134.'---------------------------------------------------------

135.136.'公差数据定义

137.138.'公历每月前面的天数

139.MonthAdd(0) = 0

140.MonthAdd(1) = 31

141.MonthAdd(2) = 59

142.MonthAdd(3) = 90

143.MonthAdd(4) = 120

144.MonthAdd(5) = 151

145.MonthAdd(6) = 181

146.MonthAdd(7) = 212

147.MonthAdd(8) = 243

148.MonthAdd(9) = 273

149.MonthAdd(10) = 304

150.MonthAdd(11) = 334

151.152.'农历数据

153.NongliData(0) = 2635

154.NongliData(1) = 333387

155.NongliData(2) = 1701

156.NongliData(3) = 1748

157.NongliData(4) = 267701

158.NongliData(5) = 694

159.NongliData(6) = 2391

160.NongliData(7) = 133423

161.NongliData(8) = 1175

162.NongliData(9) = 396438

163.NongliData(10) = 3402

164.NongliData(11) = 3749

165.NongliData(12) = 331177

166.NongliData(13) = 1453

167.NongliData(14) = 694

168.NongliData(15) = 201326

169.NongliData(16) = 2350

170.NongliData(17) = 465197

171.NongliData(18) = 3221

172.NongliData(19) = 3402

173.NongliData(20) = 400202

174.NongliData(21) = 2901

175.NongliData(22) = 1386

176.NongliData(23) = 267611

177.NongliData(24) = 605

178.NongliData(25) = 2349

179.NongliData(26) = 137515

180.NongliData(27) = 2709

181.NongliData(28) = 464533

182.NongliData(29) = 1738

183.NongliData(30) = 2901

184.NongliData(31) = 330421

185.NongliData(32) = 1242

186.NongliData(33) = 2651

187.NongliData(34) = 199255

188.NongliData(35) = 1323

189.NongliData(36) = 529706

190.NongliData(37) = 3733

191.NongliData(38) = 1706

192.NongliData(39) = 398762

193.NongliData(40) = 2741

194.NongliData(41) = 1206

195.NongliData(42) = 267438

196.NongliData(43) = 2647

197.NongliData(44) = 1318

198.NongliData(45) = 204070

199.NongliData(46) = 3477

200.NongliData(47) = 461653

201.NongliData(48) = 1386

202.NongliData(49) = 2413

203.NongliData(50) = 330077

204.NongliData(51) = 1197

205.NongliData(52) = 2637

206.NongliData(53) = 268877

207.NongliData(54) = 3365

208.NongliData(55) = 531109

209.NongliData(56) = 2900

210.NongliData(57) = 2922

211.NongliData(58) = 398042

212.NongliData(59) = 2395

213.NongliData(60) = 1179

214.NongliData(61) = 267415

215.NongliData(62) = 2635

216.NongliData(63) = 661067

217.NongliData(64) = 1701

218.NongliData(65) = 1748

219.NongliData(66) = 398772

220.NongliData(67) = 2742

221.NongliData(68) = 2391

222.NongliData(69) = 330031

223.NongliData(70) = 1175

224.NongliData(71) = 1611

225.NongliData(72) = 200010

226.NongliData(73) = 3749

227.NongliData(74) = 527717

228.NongliData(75) = 1452

229.NongliData(76) = 2742

230.NongliData(77) = 332397

231.NongliData(78) = 2350

232.NongliData(79) = 3222

233.NongliData(80) = 268949

234.NongliData(81) = 3402

235.NongliData(82) = 3493

236.NongliData(83) = 133973

237.NongliData(84) = 1386

238.NongliData(85) = 464219

239.NongliData(86) = 605

240.NongliData(87) = 2349

241.NongliData(88) = 334123

242.NongliData(89) = 2709

243.NongliData(90) = 2890

244.NongliData(91) = 267946

245.NongliData(92) = 2773

246.NongliData(93) = 592565

247.NongliData(94) = 1210

248.NongliData(95) = 2651

249.NongliData(96) = 395863

250.NongliData(97) = 1323

251.NongliData(98) = 2707

252.NongliData(99) = 265877

253.End Sub

254.255.'############################################################

256.'主要方法 Action

257.' inDay 输入日期,如果不输入则默认为当前日期

258.' sDay 中文格式日期

259.' sWeekDay 周几

260.' sChinaYear 农历年

261.' sChinaDay 农历日

262.' sChinaAni 属相

263.'############################################################

264.Public Function Action(inDay,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)

265.266.'转换要转换的日期

267.If inDay="" Or Not IsDate(inDay) Then

268.'获取当前系统时间

269.curTime = Now()

270.Else

271.curTime = CDate(inDay)

272.End If

273.274.If Datediff("d",curTime,Cdate("1921-2-8"))>0 Then

275.Exit Function

276.End If

277.278.'生成当前公历年、月、日 ==> sDay

279.curYear = Year(curTime)

280.curMonth = Month(curTime)

281.curDay = Day(curTime)

282.283.sDay = curYear&"年"

284.If (curMonth < 10) Then

285.sDaysDay = sDay&"0"&curMonth&"月"

286.Else

287.sDaysDay = sDay&curMonth&"月"

288.End If

289.If (curDay < 10) Then

290.sDaysDay = sDay&"0"&curDay&"日"

291.Else

292.sDaysDay = sDay&curDay&"日"

293.End If

294.295.'生成当前公历星期 ==> sWeekDay

296.curWeekday = Weekday(curTime)

297.sWeekDay = arrWeekName(curWeekday)

298.299.'计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)

300.TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38

301.If ((curYear Mod 4) = 0 AND curMonth > 2) Then

302.TheDateTheDate = TheDate + 1

303.End If

304.305.'计算农历天干、地支、月、日

306.isEnd = 0307.m = 0308.'------------------------------------

309.Do

310.If (NongliData(m) < 4095) Then

311.k = 11312.Else

313.k = 12314.End if

315.316.n = k317.'------------------------------------

318.Do

319.If (n < 0) Then

320.Exit Do

321.End If

322.323.'获取NongliData(m)的第n个二进制位的值

324.bit = NongliData(m)

325.For i = 1 To n Step 1

326.bit = Int(bit / 2)

327.Next

328.bitbit = bit Mod 2

329.330.If (TheDate <= 29 + bit) Then

331.isEnd = 1332.Exit Do

333.End If

334.335.TheDateTheDate = TheDate - 29 - bit

336.337.nn = n - 1

338.Loop

339.'------------------------------------

340.If (isEnd = 1) Then

341.Exit Do

342.End If

343.344.mm = m + 1

345.Loop

346.'------------------------------------

347.348.curYear = 1921 + m

349.curMonth = k - n + 1

350.curDay = TheDate351.352.If (k = 12) Then

353.If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then

354.curMonth = 1 - curMonth

355.ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then

356.curMonthcurMonth = curMonth - 1

357.End if

358.End If

359.360.'生成农历天干、地支==> sChinaYear

361.sChinaYear = "农历"&arrTianGan(((curYear - 4) Mod 60) Mod 10)&arrDiZhi(((curYear - 4) Mod 60) Mod 12)&"年"

362.'生成属相 == > sChinaAni

363.sChinaAni = arrShuXiang(((curYear - 4) Mod 60) Mod 12)

364.365.'生成农历月、日 ==> NongliDayStr

366.If (curMonth < 1) Then

367.sChinaDay = "闰"&arrMonName(-1 * curMonth)

368.Else

369.sChinaDay = arrMonName(curMonth)

370.End If

371.sChinaDaysChinaDay = sChinaDay&"月"

372.373.sChinaDaysChinaDay = sChinaDay & arrDayName(curDay)

374.End Function

375.End Class

376.%>四、JavaScript 代码:

1.2.

4.var lunarInfo=new Array(

5.0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,

6.0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,

7.0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,

8.0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,

9.0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,

10.0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,

11.0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,

12.0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,

13.0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,

14.0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,

15.0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,

16.0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,

17.0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,

18.0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,

19.0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)

20.var Animals=new Array("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");

21.var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");

22.var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");

23.var now = new Date();

24.var SY = now.getYear();

25.var SM = now.getMonth();

26.var SD = now.getDate();

27.28.//==== 传入 offset 传回干支, 0=甲子

29.function cyclical(num) { return(Gan[num%10]+Zhi[num%12])}

30.31.//==== 传回农历 y年的总天数

32.function lYearDays(y) {

33.     var i, sum = 34834.     for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-1900] & i)? 1: 0

35.     return(sum+leapDays(y))

36.}

37.38.//==== 传回农历 y年闰月的天数

39.function leapDays(y) {

40.     if(leapMonth(y))    return((lunarInfo[y-1900] & 0x10000)? 30: 29)

41.     else return(0)

42.}

43.44.//==== 传回农历 y年闰哪个月 1-12 , 没闰传回 0

45.function leapMonth(y) { return(lunarInfo[y-1900] & 0xf)}

46.47.//====================================== 传回农历 y年m月的总天数

48.function monthDays(y,m) { return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 )}

49.50.//==== 算出农历, 传入日期物件, 传回农历日期物件

51.//       该物件属性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl

52.function Lunar(objDate) {

53.     var i, leap=0, temp=054.     var baseDate = new Date(1900,0,31)

55.     var offset     = (objDate - baseDate)/86400000

56.57.     this.dayCyl = offset + 40

58.     this.monCyl = 1459.60.     for(i=1900; i0; i++) {

61.        temp = lYearDays(i)

62.        offset -= temp63.        this.monCyl += 12

64.     }

65.     if(offset

66.        offset += temp;

67.        i--;

68.        this.monCyl -= 1269.     }

70.71.     this.year = i

72.     this.yearCyl = i-1864

73.74.     leap = leapMonth(i) //闰哪个月

75.     this.isLeap = false76.77.     for(i=1; i0; i++) {

78.        //闰月

79.        if(leap>0 && i==(leap+1) && this.isLeap==false)

80.           { --i; this.isLeap = true; temp = leapDays(this.year); }

81.        else

82.           { temp = monthDays(this.year, i); }

83.84.        //解除闰月

85.        if(this.isLeap==true && i==(leap+1)) this.isLeap = false86.87.        offset -= temp88.        if

(this.isLeap == false) this.monCyl ++

89.     }

90.91.     if(offset==0 && leap>0 && i==leap+1)

92.        if(this.isLeap)

93.           { this.isLeap = false; }

94.        else

95.           { this.isLeap = true; --i; --this.monCyl;}

96.97.     if(offset

98.99.     this.month = i

100.     this.day = offset + 1

101.}

102.103.function YYMMDD(){

104.      var cl = '';

105.      if (now.getDay() == 0) cl = '';

106.      if (now.getDay() == 6) cl = '';

107.      return(cl+SY+'年'+(SM+1)+'月'+SD+'日');

108.}

109.function weekday(){

110.      var day = new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");

111.      var cl = '';

112.      if (now.getDay() == 0) cl = '';

113.      if (now.getDay() == 6) cl = '';

114.      return(cl+ day[now.getDay()]+ '');

115.}

116.//==== 中文日期

117.function cDay(m,d){

118.var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');

119.var nStr2 = new Array('初','十','廿','卅',' ');

120.var s;

121.if (m>10){s = '十'+nStr1[m-10]} else {s = nStr1[m]} s += '月'

122.switch (d) {

123.    case 10:s += '初十'; break;

124.    case 20:s += '二十'; break;

125.    case 30:s += '三十'; break;

126.    default:s += nStr2[Math.floor(d/10)]; s += nStr1[d%10];

127.}

128.return(s);

129.}

130.function solarDay1(){

131.      var sDObj = new Date(SY,SM,SD);

132.      var lDObj = new Lunar(sDObj);

133.      var cl = '';

134.      var tt = '【'+Animals[(SY-4)%12]+'】'+cyclical(lDObj.monCyl)+'月 '+cyclical(lDObj.dayCyl++)+'日' ;

135.      return(cl+tt+'');

136.}

137.function solarDay2(){

138.      var sDObj = new Date(SY,SM,SD);

139.      var lDObj = new Lunar(sDObj);

140.      var cl = '';

141.      //农历BB'+(cld[d].isLeap?'闰 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日

142.      var tt = cyclical(SY-1900+36)+'年 '+cDay(lDObj.month,lDObj.day);

143.      return(cl+tt+'');

144.}

145.function solarDay3(){

146.var sTermInfo = new Array

(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.var solarTerm = new Array("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","

小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至")

148.var lFtv = new Array("0101*春节","0115 元宵节","0505 端午节","0707 七夕情人节","0715 中元节","0815 中秋节","0909

重阳节","1208 腊八节","1224 小年","0100*除夕")

149.var sFtv = new Array("0101*元旦","0214 情人节","0308 妇女节","0312 植树节","0315 消费者权益日",

150."0401 愚人节","0501 劳动节","0504 青年节","0512 护士节","0601 儿童节","0701 建党节 香港回归纪念",

151."0801 建军节","0808 父亲节","0908 茂生日","0909 逝世纪念","0910 教师节","0928 孔子诞辰","1001*国庆节",

152."1006 老人节","1001 ListenWind生日","1024 联合国日","1112 孙中山诞辰","1220 澳门回归纪念","1225 圣诞节","1226 诞

辰")

153.154.    var sDObj = new Date(SY,SM,SD);

155.    var lDObj = new Lunar(sDObj);

156.    var lDPOS = new Array(3)

157.    var festival='',solarTerms='',solarFestival='',lunarFestival='',tmp1,tmp2;

158.    //农历节日

159.    for(i in lFtv)

160.    if(lFtv[i].match(/^(/d{2})(.{2})([/s/*])(.+)$/)) {

161.     tmp1=Number(RegExp.$1)-lDObj.month

162.     tmp2=Number(RegExp.$2)-lDObj.day

163.     if(tmp1==0 && tmp2==0) lunarFestival=RegExp.$4

164.    }

165.    //国历节日

166.    for(i in sFtv)

167.    if(sFtv[i].match(/^(/d{2})(/d{2})([/s/*])(.+)$/)){

168.     tmp1=Number(RegExp.$1)-(SM+1)

169.     tmp2=Number(RegExp.$2)-SD

170.     if(tmp1==0 && tmp2==0) solarFestival = RegExp.$4

171.    }

172.    //节气

173.    tmp1 = new Date((31556925974.7*(SY-1900)+sTermInfo[SM*2+1]*60000)+Date.UTC(1900,0,6,2,5))

174.    tmp2 = tmp1.getUTCDate()

175.    if (tmp2==SD) solarTermsolarTerms = solarTerm[SM*2+1]

176.    tmp1 = new Date((31556925974.7*(SY-1900)+sTermInfo[SM*2]*60000)+Date.UTC(1900,0,6,2,5))

177.    tmp2= tmp1.getUTCDate()

178.    if (tmp2==SD) solarTermsolarTerms = solarTerm[SM*2]

179.180.    if(solarTerms == '' && solarFestival == '' && lunarFestival == '')

181.      festival = '';

182.    else

183.      festival = '

'+

184.      ''+solarTerms + ' ' + solarFestival + ' ' +

lunarFestival+'

185.      '

';

186.

187.    var cl = '';

188.    return(cl+festival+'');

189.}

190.function setCalendar(){

191.      document.write('

border=0 CELLPADDING=0 CELLSPACING=0>

');

192.      document.write(YYMMDD()+'  '+weekday());

193.      document.write('

194.      document.write('

');

195.      document.write(solarDay1());

196.      document.write('

');

197.      document.write(solarDay2());

198.      document.write('

');

199.      document.write(solarDay3());

200.      document.write('

');

201.}

202.203.setCalendar();

204.//-->205.206.207.上面的代码不支持

Firefox,请使用查找、替换,把getYear()修改为getFullYear()就可以支持firefox了。

五、Flash代码:

农历FLASH源码、旧历FLASH日历、旧历FLASH时钟

在FLASH中,制作时钟、日历都不难。在网上搜索一下,也会有一大遍源码等着你去下载。但不知是我孤陋寡闻,还是咋地。在网上

还没见过农历的代码,在民族文化如此繁荣的中国。竟然没有人来研究这个。实在是有点遗憾。花点时间,研究了一下。随后把源码

附上。希望大家共同讨论。其中难的就是闰月部分。

制作过程,前面的就不说了。直接发代码吧。

新建一倒计时类"Taoshaw_data.as"。

然后输入如下代码:

1.class Taoshaw_data extends Date {

2.  //================版权声明开始================// 3.  //★淘沙网:http://www.taoshaw.com 4.  //★淘沙网所有教程欢

迎转载。不过请转载时注明出处。谢谢合作。 5.  //================版权声明结束================// 6.

/*=============================================

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.  private var tao_txtnum_info = new Array(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.  private var tao_txtsolarMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

27.  //定义私有函数干支等信息 28.  private var Gan = new Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬",

"癸");

29.  private var Zhi = new Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥");

30.  private var Animals = new Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪");

31.  //农历节气 32.  private var tao_txtsolarTerm = new Array("小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清

明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬",

"小雪", "大雪", "冬至");

33.  private var tao_txtsTermInfo = new Array(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.  private var nStr1 = new Array('日', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十');

35.  private var nStr2 = new Array('初', '十', '廿', '卅', '□');

36.  private var monthName = new Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV",

"DEC");

37.  private var cyear:Number;

38.  private var cmonth:Number;

39.  private var cday:Number;

40.  private var isLeap:Boolean;

41.  private var nianzhu:String;

42.  private var yuezhu:String;

43.  private var rizhu:String;

44.  private var jie:String;

45.  public function Taoshaw_data(yearOrTimevalue:Number, month:Number, date:Number, hour:Number, minute:Number,

second:Number, millisecond:Number) {

46.    super(yearOrTimevalue, month, date, hour, minute, second, millisecond);

47.    var leap:Number = 0;

48.    var temp:Number = 0;

49.    var y:Number, m:Number, d;

50.    Number;

51.    y = getFullYear();

52.    m = getMonth();

53.    d = getDate();

54.    var offset = (Date.UTC(y, m, d)-Date.UTC(1900, 0, 31))/86400000;

55.    for (var i = 1900; i<2100 && offset>0; i++) {

56.      temp = lYearDays(i);

57.      offset -= temp;

58.    }

59.    if (offset<0) {

60.      offset += temp;

61.      i--;

62.    }

63.    cyear = i;

64.    leap = leapMonth(i);

65.    isLeap = false;

66.    for (var i = 1; i<13 && offset>0; i++) {

67.      if (leap>0 && i == (leap+1) && isLeap == false) {

68.        --i;

69.        isLeap = true;

70.        temp = leapDays(cyear);

71.      } else {

72.        temp = monthDays(cyear, i);

73.      }

74.      if (isLeap == true && i == (leap+1)) {

75.        isLeap = false;

76.      }

77.      offset -= temp;

78.    }

79.    if (offset == 0 && leap>0 && i == leap+1) {

80.      if (isLeap) {

81.        isLeap = false;

82.      } else {

83.        isLeap = true;

84.        --i;

85.      }

86.    }

87.    if (offset<0) {

88.      offset += temp;

89.      --i;

90.    }

91.    cmonth = i;

92.    cday = offset+1;

93.    var cY, cM, cD;

94.    if (m<2) {

95.      cY = cyclical(y-1900+36-1);

96.    } else {

97.      cY = cyclical(y-1900+36);

98.    }

99.    cM = cyclical((y-1900)*12+m+12);

100.    var tmp1 = sTerm(y, m*2);

101.    var tmp2 = sTerm(y, m*2+1);

102.    if (d == tmp1) {

103.      jie = tao_txtsolarTerm[m*2];

104.    } else {

105.      if (d == tmp2) {

106.        jie = tao_txtsolarTerm[m*2+1];

107.      } else {

108.        jie = "";

109.      }

110.    }

111.    this.jie = jie;

112.    //--------------------------------------------- 113.    var term2 = sTerm(y, 2);

114.    var firstNode = sTerm(y, m*2);

115.    if (m == 1 && d>=term2) {

116.      cY = cyclical(y-1900+36);

117.      trace("新年柱"+cY);

118.    }

119.    if ((d+1)>=firstNode) {

120.      cM = cyclical((y-1900)*12+m+13);

121.    }

122.    var dayCyclical = Date.UTC(y, m, 1, 0, 0, 0, 0)/86400000+25567+10;

123.    cD = cyclical(dayCyclical+d-1);

124.    nianzhu = cY;

125.    yuezhu = cM;

126.    rizhu = cD;

127.  }

128.  public function getTaosJYear():Number {

129.    return cyear;

130.  }

131.  public function getTaoJMonth():Number {

132.    return cmonth;

133.  }

134.  public function getTaoJDay():Number {

135.    return cday;

136.  }

137.  //getmonth() 得到的比当前月份小1.因为是以数组形式来存储月份的。下标是从0-11. 138.  public function

getnewMonth():Number {

139.    return getMonth()+1;

140.  }

141.  public function getTaoJNianZhu():String {

142.    return nianzhu;

143.  }

144.  public function getYueZhu():String {

145.    return yuezhu;

146.  }

147.  public function getRiZhu():String {

148.    return rizhu;

149.  }

150.  public function getJieQi():String {

151.    return jie;

152.  }

153.  public function getShiceng():String {

154.    return Zhi[Math.round((getHours()%23)/2)]+"时";

155.  }

156.  private function lYearDays(y) {

157.    var sum:Number = 348;

158.    for (var i = 0x8000; i>0x8; i >>= 1) {

159.      sum += (tao_txtnum_info[y-1900] & i) ? 1 : 0;

160.    }

161.    return (sum+leapDays(y));

162.  }

163.  private function leapDays(y) {

164.    if (leapMonth(y)) {

165.      return ((tao_txtnum_info[y-1899] & 0xf) == 0xf ? 30 : 29);

166.    } else {

167.      return (0);

168.    }

169.  }

170.  private function leapMonth(y) {

171.    var lm = tao_txtnum_info[y-1900] & 0xf;

172.    return (lm == 0xf ? 0 : lm);

173.  }

174.  private function monthDays(y, m) {

175.    return ((tao_txtnum_info[y-1900] & (0x10000 >> m)) ? 30 : 29);

176.  }

177.  private function sTerm(y, n) {

178.    var offDate = new Date((31556925974.7*(y-1900)+tao_txtsTermInfo[n]*60000)+Date.UTC(1900, 0, 6, 2, 5));

179.    return (offDate.getUTCDate());

180.  }

181.  private function solarDays(y, m) {

182.    if (m == 1) {

183.      return (((y%4 == 0) && (y%100 != 0) || (y%400 == 0)) ? 29 : 28);

184.    } else {

185.      return (tao_txtsolarMonth[m]);

186.    }

187.  }

188.  private function cyclical(num) {

189.    return (Gan[num%10]+Zhi[num%12]);

190.  }

191.}

192.193.保存。

194.2、用法上面也写得有。在FLASH中调用的时候。请参考如下代码:

195.196./*

197.getFullYear();获取新历年份

198.getnewMonth();获取月份,如果像本例这样,独立用数组表示,就直接用getMonth()获取,因为数组会少一个值.是从0开始的.

199.getDate()获取多少号.

200.getSeconds();获取秒值

201.getDay();获取星期几

202.getHours();获取小时(整点)

203.getMinutes();获取分数

204.getTaosJYear();获取中国农历年.

205.getTaoJMonth(); 获取中国农历月.

206.getTaoJDay();获取中国农历日.

207.getTaoJNianZhu();获取年柱

208.getYueZhu();获取月柱

209.getRiZhu();获取日柱

210.getShiceng();获取时辰

211.getJieQi();获取二十四节气

212.*/213.//定义新Taoshaw_data类,因为Taoshaw_data类继承于data类,所以在此直接使用此类即可. 214.//需要实时更新时,就

加onEnterFrame函数. 215.onEnterFrame = function () {

216.  var my_data:Taoshaw_data = new Taoshaw_data();

217.  //定义两个数组,用于显示**月,以及星期* 218.  var my_xingqi:Array = new Array();

219.  my_xingqi = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];

220.  var my_yuefen:Array = new Array();

221.  my_yuefen = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"];

222.  //定义变量myhaoshu获取当前日的号数 223.  var myhaoshu = my_data.getDate();

224.  //当数值小于10的时候,就在前面添加一个0; 225.  var miao = my_data.getSeconds();

226.  var fen = 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()

+"月"+my_data.getRiZhu()+"日"+my_data.getShiceng()+my_data.getJieQi();

240.};

源码下载:http://download.csdn.net/source/830951

六、C++代码:

1、头文件

1.//xDate.h

2./************************************************************************************************************

3.               Author  :xShandow

4.         Dest    :A Date Class For C++

5.         Email   :chenzg@hftd.com

6.         HomePage:http://www.hftd.com

7.         Dev Env :Visual C++6.0

8.         OS.     :Windows 2000 Professinal

9.         Date    :2003-NOV-15

10.************************************************************************************************************/

11.#ifndef XDATE_H  12.#define XDATE_H   13.14.#include   15.extern const WORD START_YEAR;

16.extern const WORD END_YEAR ;

17.18.class xDate

19.{

20.private:

21.   WORD    m_iYear, m_iMonth, m_iDay;

22.   void    l_InitData();

23.   //计算从1901年1月1日过iSpanDays天后的阴历日期     24.   static void   l_CalcLunarDate(WORD &iYear, WORD

&iMonth ,WORD &iDay,LONG iSpanDays);

25.   //计算公历iYear年iMonth月iDay日对应的节气 0-24,0表不是节气  26.   static WORD   l_GetLunarHolDay(WORD iYear,

WORD iMonth, WORD iDay);

27.public:

28.   //=====================================================================================//  29.   xDate(WORD

iYear, WORD iMonth, WORD iDay);

30.   xDate();

31.   //=====================================================================================//  32.33.   WORD

GetYear(){return m_iYear;}

34.   WORD GetMonth(){return m_iMonth;}

35.   WORD GetDay(){return m_iDay;}

36.

37.   //=====================================================================================//  38.   void GetDate

(WORD &iYear, WORD &iMonth, WORD &iDay);

39.   BOOL SetDate(WORD iYear , WORD iMonth , WORD iDay);

40.   //=====================================================================================//  41.   //判断iYear是

不是闰年   42.    static BOOL IsLeapYear(WORD iYear)  {return !(iYear%4)&&(iYear%100) || !(iYear%400);}

43.

44.   //计算iYear,iMonth,iDay对应是星期几 1年1月1日 --- 65535年12月31日   45.   static WORD WeekDay(WORD iYear, WORD

iMonth, WORD iDay);

46.

47.   //返回iYear年iMonth月的天数 1年1月 --- 65535年12月   48.   static WORD MonthDays(WORD iYear, WORD iMonth);

49.

50.   //返回阴历iLunarYer年阴历iLunarMonth月的天数,如果iLunarMonth为闰月,  51.   //高字为第二个iLunarMonth月的天数

,否则高字为0   52.   // 1901年1月---2050年12月   53.   static LONG LunarMonthDays(WORD iLunarYear, WORD

iLunarMonth);

54.

55.   //返回阴历iLunarYear年的总天数  56.   // 1901年1月---2050年12月   57.   static WORD LunarYearDays(WORD

iLunarYear);

58.

59.   //返回阴历iLunarYear年的闰月月份,如没有返回0   60.   // 1901年1月---2050年12月  61.   static WORD

GetLeapMonth(WORD iLunarYear);

62.

63.   //把iYear年格式化成天干记年法表示的字符串   64.   static void FormatLunarYear(WORD  iYear, char *pBuffer);

65.66.   //把iMonth格式化成中文字符串   67.   static void FormatMonth(WORD iMonth, char *pBuffer, BOOL bLunar =

TRUE);

68.

69.   //把iDay格式化成中文字符串   70.   static void FormatLunarDay(WORD  iDay, char *pBuffer);

71.

72.   //计算公历两个日期间相差的天数  1年1月1日 --- 65535年12月31日   73.   static LONG CalcDateDiff(WORD iEndYear,

WORD iEndMonth, WORD iEndDay,WORD iStartYear = START_YEAR,WORD iStartMonth =1, WORD iStartDay =1);

74.

75.   //计算公历iYear年iMonth月iDay日对应的阴历日期,返回对应的阴历节气 0-24  76.   //1901年1月1日---2050年12月31日

77.   static WORD GetLunarDate(WORD iYear, WORD iMonth, WORD iDay,WORD &iLunarYear, WORD &iLunarMonth, WORD

&iLunarDay);

78.};

79.80.#endif //XDATE_H 2、实现文件

1.//xDate.cpp  2.#include "xDate.h"   3.//#include   4.5.6.extern WORD gLunarMonthDay[];

7.extern BYTE gLunarMonth[];

8.extern BYTE gLunarHolDay[];

9.10.const  WORD START_YEAR =1901;

11.const  WORD END_YEAR   =2050;

12.//===========================================================================//  13.void xDate::l_InitData()

14.{

15.   SYSTEMTIME systime;

16.   ::GetSystemTime(&systime);

17.

18.   m_iYear  = systime.wYear;

19.   m_iMonth = systime.wMonth;

20.   m_iDay   = systime.wDay;

21.}

22.//===========================================================================//  23.xDate::xDate(WORD iYear, WORD

iMonth, WORD iDay)

24.{

25.   if(!SetDate(iYear, iMonth, iDay))

26.      l_InitData();

27.}

28.//===========================================================================//  29.xDate::xDate()

30.{

31.   l_InitData();

32.}

33.//===========================================================================//  34.LONG xDate::CalcDateDiff(WORD

iEndYear, WORD iEndMonth, WORD iEndDay,WORD  iStartYear, WORD iStartMonth, WORD iStartDay)

35.{

36.   WORD monthday[]={0, 31, 59 ,90, 120, 151, 181, 212, 243, 273, 304, 334};

37.   //计算两个年份1月1日之间相差的天数   38.   LONG iDiffDays =(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>2? 1: 0);

45.   iDiffDays += iEndDay;

46.   //减去iStartYear年1月1日到iStartMonth月iStartDay日之间的天数   47.   iDiffDays -= (monthday[iStartMonth-1] +

(IsLeapYear(iStartYear)&&iStartMonth>2 ? 1: 0));

48.   iDiffDays -= iStartDay;

49.   return iDiffDays;

50.}

51.//===========================================================================//  52.void  xDate::l_CalcLunarDate

(WORD &iYear, WORD &iMonth ,WORD &iDay, LONG iSpanDays)

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

65.      {

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.   LONG tmp = 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 < tmp)

92.            break;

93.         iSpanDays -= tmp;

94.      }

95.      tmp = LOWORD(LunarMonthDays(iYear, ++iMonth));

96.   }

97.   //计算日  98.   iDay += WORD(iSpanDays);

99.}

100.//===========================================================================//  101.WORD xDate::GetLunarDate

(WORD iYear, WORD iMonth, WORD iDay,WORD &iLunarYear, WORD &iLunarMonth, WORD &iLunarDay)

102.{

103.   l_CalcLunarDate(iLunarYear, iLunarMonth, iLunarDay,CalcDateDiff(iYear, iMonth, iDay));

104.   return l_GetLunarHolDay(iYear, iMonth, iDay);

105.}

106.//===========================================================================//  107.//根据节气数据存储格式,计算

阳历iYear年iMonth月iDay日对应的节气,  108.WORD xDate::l_GetLunarHolDay(WORD iYear, WORD iMonth, WORD iDay)

109.110.111.{

112.   BYTE &flag = gLunarHolDay[(iYear - START_YEAR)*12+iMonth -1];

113.   WORD day;

114.   if(iDay <15)

115.      day= 15 - ((flag>>4)&0x0f);

116.   else

117.      day = ((flag)&0x0f)+15;

118.   if(iDay == day)

119.      return (iMonth-1) *2 + (iDay>15? 1: 0) +1;

120.   else

121.      return 0;

122.}

123.//===========================================================================//  124.void xDate::GetDate(WORD

&iYear, WORD &iMonth, WORD &iDay)

125.{

126.   iYear  = m_iYear;

127.   iMonth = m_iMonth;

128.   iDay   = m_iDay;

129.}

130.//===========================================================================//  131.BOOL xDate::SetDate(WORD

iYear, WORD iMonth, WORD iDay)

132.{

133.   if(iYear < START_YEAR || iYear > END_YEAR || iMonth <1 || iMonth >12)

134.      return FALSE;

135.

136.   if(iDay <1 || iDay > MonthDays(iYear, iMonth))

137.      return FALSE;

138.

139.   m_iYear   = iYear;

140.   m_iMonth  = iMonth;

141.   m_iDay    = iDay;

142.

143.   return TRUE;

144.}

145.//===========================================================================//  146.WORD xDate::WeekDay(WORD

iYear, WORD iMonth, WORD iDay)

147.{

148.   //数组元素monthday表示第i个月以前的总天数除以7的余数   149.   WORD monthday[]={0,3,3,6,1,4,6,2,5,0,3,5};

150.   WORD iDays = (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.   return iDays%7;

157.}

158.//===========================================================================//  159.WORD xDate::MonthDays(WORD

iYear, WORD iMonth)

160.{

161.   switch(iMonth)

162.   {

163.   case 1: //一  (月)  164.   case 3: //三  (月)  165.   case 5: //五  (月)  166.   case 7: //七  (月)  167.

case 8: //八  (月)  168.   case 10://十  (月)  169.   case 12://十二(月)  170.      return 31;

171.172.   case 4: //四  (月)  173.   case 6: //六  (月)  174.   case 9: //九  (月)  175.   case 11://十一(月)

176.      return 30;

177.178.   case 2: //二  (月)  179.      //如果是闰年   180.      if(IsLeapYear(iYear))

181.         return 29;

182.      else

183.         return 28;

184.

185.   }

186.   return 0;

187.}

188.//===========================================================================//  189.WORD xDate::GetLeapMonth

(WORD iLunarYear)

190.{

191.   BYTE &flag = gLunarMonth[(iLunarYear - START_YEAR)/2];

192.   return  (iLunarYear - START_YEAR)%2 ? flag&0x0f : flag>>4;

193.}

194.//===========================================================================//  195.LONG xDate::LunarMonthDays

(WORD iLunarYear, WORD iLunarMonth)

196.{

197.   if(iLunarYear < START_YEAR)

198.      return 30L;

199.

200.   WORD height =0 ,low =29;

201.   int iBit = 16 - iLunarMonth;

202.

203.   if(iLunarMonth > GetLeapMonth(iLunarYear) && GetLeapMonth(iLunarYear))

204.      iBit --;

205.

206.   if(gLunarMonthDay[iLunarYear - START_YEAR] & (1<

207.      low ++;

208.

209.   if(iLunarMonth == GetLeapMonth(iLunarYear))

210.      if(gLunarMonthDay[iLunarYear - START_YEAR] & (1<< (iBit -1)))

211.         height =30;

212.      else

213.         height =29;

214.

215.      return MAKELONG(low, height);

216.}

217.//===========================================================================//  218.WORD xDate::LunarYearDays

(WORD iLunarYear)

219.{

220./*

221.   WORD days=348 ; //12*29

222.   int month = 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.   return days;

235.*/

236.   WORD days =0;

237.   for(WORD i=1; i<=12; i++)

238.   {

239.      LONG tmp = LunarMonthDays(iLunarYear ,i);

240.      days += HIWORD(tmp);

241.      days += LOWORD(tmp);

242.   }

243.   return days;

244.}

245.//===========================================================================//  246.void

xDate::FormatLunarYear(WORD iYear, char *pBuffer)

247.{

248.   char szText1[]="甲乙丙丁戊己庚辛壬癸";

249.   char szText2[]="子丑寅卯辰巳午未申酉戌亥";

250.   char szText3[]="鼠牛虎免龙蛇马羊猴鸡狗猪";

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.void xDate::FormatMonth

(WORD iMonth, char *pBuffer, BOOL bLunar)

260.261.{

262.   if(!bLunar && iMonth==1)

263.   {

264.      strcpy(pBuffer, " 一月");

265.      return;

266.   }

267.   char szText[]="正二三四五六七八九十";

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

278.      strcpy(pBuffer, "十二");

279.   strcpy(pBuffer+4  , "月");

280.

281.

282.}

283.//===========================================================================//  284.void xDate::FormatLunarDay

(WORD iDay, char *pBuffer)

285.{

286.   char szText1[]="初十廿三";

287.   char szText2[]="一二三四五六七八九十";

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

295.   {

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.WORD gLunarMonthDay[]=

308.{

309.   //测试数据只有1901.1.1 --2050.12.31   310.   0X4ae0, 0Xa570, 0X5268, 0Xd260, 0Xd950, 0X6aa8, 0X56a0, 0X9ad0,

0X4ae8, 0X4ae0,   //1910   311.   0Xa4d8, 0Xa4d0, 0Xd250, 0Xd548, 0Xb550, 0X56a0, 0X96d0, 0X95b0, 0X49b8, 0X49b0,

//1920   312.   0Xa4b0, 0Xb258, 0X6a50, 0X6d40, 0Xada8, 0X2b60, 0X9570, 0X4978, 0X4970, 0X64b0,   //1930   313.

0Xd4a0, 0Xea50, 0X6d48, 0X5ad0, 0X2b60, 0X9370, 0X92e0, 0Xc968, 0Xc950, 0Xd4a0,   //1940   314.   0Xda50, 0Xb550,

0X56a0, 0Xaad8, 0X25d0, 0X92d0, 0Xc958, 0Xa950, 0Xb4a8, 0X6ca0,   //1950   315.   0Xb550, 0X55a8, 0X4da0, 0Xa5b0,

0X52b8, 0X52b0, 0Xa950, 0Xe950, 0X6aa0, 0Xad50,   //1960   316.   0Xab50, 0X4b60, 0Xa570, 0Xa570, 0X5260, 0Xe930,

0Xd950, 0X5aa8, 0X56a0, 0X96d0,   //1970   317.   0X4ae8, 0X4ad0, 0Xa4d0, 0Xd268, 0Xd250, 0Xd528, 0Xb540, 0Xb6a0,

0X96d0, 0X95b0,   //1980   318.   0X49b0, 0Xa4b8, 0Xa4b0, 0Xb258, 0X6a50, 0X6d40, 0Xada0, 0Xab60, 0X9370, 0X4978,

//1990   319.   0X4970, 0X64b0, 0X6a50, 0Xea50, 0X6b28, 0X5ac0, 0Xab60, 0X9368, 0X92e0, 0Xc960,   //2000   320.

0Xd4a8, 0Xd4a0, 0Xda50, 0X5aa8, 0X56a0, 0Xaad8, 0X25d0, 0X92d0, 0Xc958, 0Xa950,   //2010   321.   0Xb4a0, 0Xb550,

0Xb550, 0X55a8, 0X4ba0, 0Xa5b0, 0X52b8, 0X52b0, 0Xa930, 0X74a8,   //2020   322.   0X6aa0, 0Xad50, 0X4da8, 0X4b60,

0X9570, 0Xa4e0, 0Xd260, 0Xe930, 0Xd530, 0X5aa0,   //2030   323.   0X6b50, 0X96d0, 0X4ae8, 0X4ad0, 0Xa4d0, 0Xd258,

0Xd250, 0Xd520, 0Xdaa0, 0Xb5a0,   //2040   324.   0X56d0, 0X4ad8, 0X49b0, 0Xa4b8, 0Xa4b0, 0Xaa50, 0Xb528, 0X6d20,

0Xada0, 0X55b0,   //2050   325.

326.};

327.328.//数组gLanarMonth存放阴历1901年到2050年闰月的月份,如没有则为0,每字节存两年   329.BYTE  gLunarMonth[]=

330.{

331.   0X00, 0X50, 0X04, 0X00, 0X20,   //1910   332.   0X60, 0X05, 0X00, 0X20, 0X70,   //1920   333.   0X05, 0X00,

0X40, 0X02, 0X06,   //1930   334.   0X00, 0X50, 0X03, 0X07, 0X00,   //1940   335.   0X60, 0X04, 0X00, 0X20, 0X70,

//1950   336.   0X05, 0X00, 0X30, 0X80, 0X06,   //1960   337.   0X00, 0X40, 0X03, 0X07, 0X00,   //1970   338.

0X50, 0X04, 0X08, 0X00, 0X60,   //1980   339.   0X04, 0X0a, 0X00, 0X60, 0X05,   //1990   340.   0X00, 0X30, 0X80,

0X05, 0X00,   //2000   341.   0X40, 0X02, 0X07, 0X00, 0X50,   //2010   342.   0X04, 0X09, 0X00, 0X60, 0X04,   //2020

343.   0X00, 0X20, 0X60, 0X05, 0X00,   //2030   344.   0X30, 0Xb0, 0X06, 0X00, 0X50,   //2040   345.   0X02, 0X07,

0X00, 0X50, 0X03    //2050   346.};

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, 15   363.//上面第一行数据为每

月节气对应日期,15减去每月第一个节气,每月第二个节气减去15得第二行   364.// 这样每月两个节气对应数据都小于16,每月用一

个字节存放,高位存放第一个节气数据,低位存放   365.//第二个节气的数据,可得下表   366.367.BYTE gLunarHolDay[]=

368.{

369.      0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X77,   //1901   370.      0X96, 0XA4,

0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78, 0X78,   //1902   371.      0X96, 0XA5, 0X87, 0X96, 0X87, 0X87,

0X79, 0X69, 0X69, 0X69, 0X78, 0X78,   //1903   372.      0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79,

0X78, 0X87,   //1904   373.      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,   //1906   375.      0X96, 0XA5,

0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78, 0X78,   //1907   376.      0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97,

0X88, 0X78, 0X78, 0X69, 0X78, 0X87,   //1908   377.      0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69,

0X78, 0X77,   //1909   378.      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,   //1911   380.      0X86, 0XA5,

0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X87,   //1912   381.      0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97,

0X78, 0X79, 0X79, 0X69, 0X78, 0X77,   //1913   382.      0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69,

0X78, 0X78,   //1914   383.      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,   //1916   385.      0X95, 0XB4,

0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78, 0X87,   //1917   386.      0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97,

0X79, 0X79, 0X79, 0X69, 0X78, 0X77,   //1918   387.      0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69,

0X78, 0X78,   //1919   388.      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,   //1921   390.      0X96, 0XB4,

0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X77,   //1922   391.      0X96, 0XA4, 0X96, 0X96, 0X97, 0X87,

0X79, 0X79, 0X69, 0X69, 0X78, 0X78,   //1923   392.      0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79,

0X77, 0X87,   //1924   393.      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,   //1926   395.      0X96, 0XA4,

0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78, 0X78,   //1927   396.      0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96,

0X88, 0X78, 0X78, 0X78, 0X87, 0X87,   //1928   397.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79,

0X77, 0X87,   //1929   398.      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,   //1931   400.      0X96, 0XA5,

0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X87,   //1932   401.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97,

0X88, 0X78, 0X78, 0X69, 0X78, 0X87,   //1933   402.      0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69,

0X78, 0X77,   //1934   403.      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,   //1936   405.      0X95, 0XB4,

0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X87,   //1937   406.      0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97,

0X78, 0X79, 0X79, 0X69, 0X78, 0X77,   //1938   407.      0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69,

0X78, 0X78,   //1939   408.      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,   //1941   410.      0X96, 0XB4,

0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X77,   //1942   411.      0X96, 0XA4, 0X96, 0X96, 0X97, 0X97,

0X79, 0X79, 0X79, 0X69, 0X78, 0X78,   //1943   412.      0X96, 0XA5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78,

0X87, 0X87,   //1944   413.      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,   //1946   415.      0X96, 0XB4,

0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78, 0X78,   //1947   416.      0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96,

0X88, 0X88, 0X78, 0X78, 0X87, 0X87,   //1948   417.      0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X79,

0X77, 0X87,   //1949   418.      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,   //1951   420.      0X96, 0XA5,

0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X87,   //1952   421.      0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97,

0X88, 0X78, 0X78, 0X79, 0X77, 0X87,   //1953   422.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X68,

0X78, 0X87,   //1954   423.      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,   //1956   425.      0XA5, 0XB4,

0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X87,   //1957   426.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97,

0X88, 0X78, 0X78, 0X69, 0X78, 0X87,   //1958   427.      0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69,

0X78, 0X77,   //1959   428.      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,   //1961   430.      0X96, 0XB4,

0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X87,   //1962   431.      0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97,

0X78, 0X79, 0X79, 0X69, 0X78, 0X77,   //1963   432.      0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78,

0X87, 0X87,   //1964   433.      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,   //1966   435.      0X96, 0XB4,

0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78, 0X77,   //1967   436.      0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6,

0X88, 0X88, 0X88, 0X78, 0X87, 0X87,   //1968   437.      0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78,

0X87, 0X87,   //1969   438.      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,   //1971   440.      0X96, 0XA4,

0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X87,   //1972   441.      0XA5, 0XB5, 0X96, 0XA5, 0XA6, 0X96,

0X88, 0X78, 0X78, 0X78, 0X87, 0X87,   //1973   442.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69,

0X78, 0X87,   //1974   443.      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,   //1976   445.      0XA5, 0XB4,

0X96, 0XA5, 0X96, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X87,   //1977   446.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97,

0X88, 0X78, 0X78, 0X79, 0X78, 0X87,   //1978   447.      0X96, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69,

0X78, 0X77,   //1979   448.      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,   //1981   450.      0X95, 0XB4,

0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77, 0X87,   //1982   451.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97,

0X78, 0X79, 0X78, 0X69, 0X78, 0X77,   //1983   452.      0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78,

0X87, 0X87,   //1984   453.      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,   //1986   455.      0X95, 0XB4,

0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X69, 0X78, 0X87,   //1987   456.      0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6,

0X87, 0X88, 0X88, 0X78, 0X87, 0X86,   //1988   457.      0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78,

0X87, 0X87,   //1989   458.      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,   //1991   460.      0X96, 0XB4,

0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X86,   //1992   461.      0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0X96,

0X88, 0X88, 0X88, 0X78, 0X87, 0X87,   //1993   462.      0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78,

0X87, 0X87,   //1994   463.      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,   //1996   465.      0XA5, 0XB3,

0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X87,   //1997   466.      0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96,

0X88, 0X78, 0X78, 0X78, 0X87, 0X87,   //1998   467.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69,

0X78, 0X87,   //1999   468.      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,   //2001   470.      0XA5, 0XB4,

0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X87,   //2002   471.      0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97,

0X88, 0X78, 0X78, 0X69, 0X78, 0X87,   //2003   472.      0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78,

0X87, 0X86,   //2004   473.      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,   //2006   475.      0X95, 0XB4,

0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78, 0X87,   //2007   476.      0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6,

0X87, 0X88, 0X87, 0X78, 0X87, 0X86,   //2008   477.      0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78,

0X87, 0X87,   //2009   478.      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,   //2011   480.      0X96, 0XB4,

0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87, 0X86,   //2012   481.      0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6,

0X87, 0X88, 0X88, 0X78, 0X87, 0X87,   //2013   482.      0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78,

0X87, 0X87,   //2014   483.      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,   //2016   485.      0XA5, 0XC3,

0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X87,   //2017   486.      0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96,

0X88, 0X88, 0X78, 0X78, 0X87, 0X87,   //2018   487.      0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79,

0X77, 0X87,   //2019   488.      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,   //2021   490.      0XA5, 0XB4,

0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87, 0X87,   //2022   491.      0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96,

0X88, 0X78, 0X78, 0X79, 0X77, 0X87,   //2023   492.      0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78,

0X87, 0X96,   //2024   493.      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,   //2026   495.      0XA5, 0XB4,

0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87, 0X87,   //2027   496.      0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6,

0X97, 0X87, 0X87, 0X78, 0X87, 0X96,   //2028   497.      0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78,

0X87, 0X86,   //2029   498.      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,   //2031   500.      0X95, 0XB4,

0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87, 0X96,   //2032   501.      0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6,

0X88, 0X88, 0X88, 0X78, 0X87, 0X86,   //2033   502.      0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X78, 0X88, 0X78,

0X87, 0X87,   //2034   503.      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,   //2036   505.      0XA5, 0XC3,

0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87, 0X86,   //2037   506.      0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6,

0X88, 0X88, 0X88, 0X78, 0X87, 0X87,   //2038   507.      0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78,

0X87, 0X87,   //2039   508.      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,   //2041   510.      0XA5, 0XB3,

0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87, 0X87,   //2042   511.      0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96,

0X88, 0X88, 0X78, 0X78, 0X87, 0X87,   //2043   512.      0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X88,

0X87, 0X96,   //2044   513.      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,   //2046   515.      0XA5, 0XB4,

0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87, 0X87,   //2047   516.      0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA5,

0X97, 0X87, 0X87, 0X88, 0X86, 0X96,   //2048   517.      0XA4, 0XC3, 0XA5, 0XA5, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78,

0X87, 0X86,   //2049   518.      0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X78, 0X78, 0X87, 0X87    //2050

519.

520.};

(感谢baickl)

七、C语言(1):

前段时间做软件写了个公历转农历的函数,目前公开给大家参考,有兴趣的朋友可以在此基础上进一步完善其功能。

1. /*------------农历转换函数-----------*/2.char *GetDayOf(PSYSTEMTIME pSt)

3.{

4. /*天干名称*/5. const char *cTianGan[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};

6. /*地支名称*/7. const char *cDiZhi[] = {"子","丑","寅","卯","辰","巳","午",

8.       "未","申","酉","戌","亥"};

9. /*属相名称*/10. const char *cShuXiang[] = {"鼠","牛","虎","兔","龙","蛇",

11.       "马","羊","猴","鸡","狗","猪"};

12. /*农历日期名*/13. const char *cDayName[] = {"*","初一","初二","初三","初四","初五",

14.       "初六","初七","初八","初九","初十",

15.       "十一","十二","十三","十四","十五",

16.       "十六","十七","十八","十九","二十",

17.       "廿一","廿二","廿三","廿四","廿五",

18.       "廿六","廿七","廿八","廿九","三十"};

19. /*农历月份名*/20. const char *cMonName[] = {"*","正","二","三","四","五","六",

21.       "七","八","九","十","十一","腊"};

22.23. /*公历每月前面的天数*/24. const int wMonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};

25. /*农历数据*/26. const int wNongliData[100] = {2635,333387,1701,1748,267701,694,2391,133423,1175,396438

27.       ,3402,3749,331177,1453,694,201326,2350,465197,3221,3402

28.       ,400202,2901,1386,267611,605,2349,137515,2709,464533,1738

29.       ,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762

30.       ,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413

31.       ,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395

32.       ,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031

33.       ,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222

34.       ,268949,3402,3493,133973,1386,464219,605,2349,334123,2709

35.       ,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};

36. static int wCurYear,wCurMonth,wCurDay;

37. static int nTheDate,nIsEnd,m,k,n,i,nBit;

38. TCHAR szNongli[30], szNongliDay[10],szShuXiang[10];

39. /*---取当前公历年、月、日---*/40. wCurYear = pSt->wYear;

41. wCurMonth = pSt->wMonth;

42. wCurDay = pSt->wDay;

43. /*---计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)---*/44. nTheDate = (wCurYear - 1921) * 365 + (wCurYear

- 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

63.    nBit = nBit/2;

64.65.   nBit = nBit % 2;

66.67.   if (nTheDate <= (29 + nBit))

68.   {

69.    nIsEnd = 1;

70.    break;

71.   }

72.73.   nTheDate = nTheDate - 29 - nBit;

74.   n = n - 1;

75.  }

76.  if(nIsEnd)

77.   break;

78.  m = m + 1;

79. }

80. wCurYear = 1921 + m;

81. wCurMonth = k - n + 1;

82. wCurDay = nTheDate;

83. if (k == 12)

84. {

85.  if (wCurMonth == wNongliData[m] / 65536 + 1)

86.   wCurMonth = 1 - wCurMonth;

87.  else if (wCurMonth > wNongliData[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. return strcat(szNongli,szNongliDay);

104.}

(感谢CSDN作者3661512)

八、C语言(2):

1./*

2.prototype: int calconv( struct convdate * );

3.struct convdate

4.{

5.int source; ==0 则输入日期为西历, !=0 则输入为农历

6.int solaryear; 输出或输入之西历年份

7.int solarmonth; 西历月

8.int solardate; 西历日

9.int lunaryear; 输出或输入之农历年份

10.int lunarmonth; 农历月

11.int lunardate; 农历日

12.int weekday; 该日为星期几 ( 0==星期日, 1==星期一, ... )

13.int kan; 该日天干 ( 0==甲, 1==乙, ..., 9==癸 )

14.int chih; 该日地支 ( 0==子, 1==丑, ..., 11==亥 )

15.};

16.呼叫时须设定 souce 的值, 若为 0 则为西历转农历, 否则为农历转西历. 然後视

17.输入为西历或农历来设定西历或农历的年月日. 转换後的年月日会填入结构中( 农

18.历或西历 ), 以及该日为星期几, 天干地支.

19.若函式的返回值为 0 表示没有错误, 1 为输入之年份错误, 2 为输入之月份错误,

20.3 为输入之日期错误.

21.输入之西历年须在 1937 - 2031 间

22.输入之农历年须在 1936 - 2030 间

23.若须扩充, 则增加 lunarcal[]

24.*/

25.26.#define firstyear 1936 /* the first year in lunarcal[] */  27.28.struct convdate

29.{

30.int source;

31.int solaryear;

32.int solarmonth;

33.int solardate;

34.int lunaryear;

35.int lunarmonth;

36.int lunardate;

37.int weekday;

38.int kan;

39.int chih;

40.};

41.42.struct taglunarcal

43.{

44.int basedays; /* 到西历 1 月 1 日到农历正月初一的累积日数 */

45.int intercalation; /* 闰月月份. 0==此年没有闰月 */

46.int baseweekday; /* 此年西历 1 月 1 日为星期几再减 1 */

47.int basekanchih; /* 此年西历 1 月 1 日之干支序号减 1 */

48.int monthdays[13]; /* 此农历年每月之大小, 0==小月(29日), 1==大月(30日)*/

49.};

50.51.struct taglunarcal lunarcal[] = {

52.{ 23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 }, /* 1936 */

53.{ 41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },

54.{ 30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 },

55.{ 49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },

56.{ 38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, /* 1940 */

57.{ 26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 },

58.{ 45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },

59.{ 35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 },

60.{ 24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 }, /* 1944 */

61.{ 43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 },

62.{ 32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 },

63.{ 21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },

64.{ 40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }, /* 1948 */

65.{ 28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },

66.{ 47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 },

67.{ 36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },

68.{ 26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 }, /* 1952 */

69.{ 44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1 },

70.{ 33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 },

71.{ 23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 },

72.{ 42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 }, /* 1956 */

73.{ 30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 },

74.{ 48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 },

75.{ 38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 },

76.{ 27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 }, /* 1960 */

77.{ 45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 },

78.{ 35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 },

79.{ 24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 },

80.{ 43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 }, /* 1964 */

81.{ 32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },

82.{ 20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 },

83.{ 39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0 },

84.{ 29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, /* 1968 */

85.{ 47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 },

86.{ 36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 },

87.{ 26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1 },

88.{ 45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 }, /* 1972 */

89.{ 33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1 },

90.{ 22, 4, 1, 37, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },

91.{ 41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 },

92.{ 30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }, /* 1976 */

93.{ 48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 },

94.{ 37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 },

95.{ 27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0 },

96.{ 46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0 }, /* 1980 */

97.{ 35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1 },

98.{ 24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 },

99.{ 43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 },

100.{ 32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1 }, /* 1984 */

101.{ 50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },

102.{ 39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1 },

103.{ 28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0 },

104.{ 47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, /* 1988 */

105.{ 36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 },

106.{ 26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1 },

107.{ 45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0 },

108.{ 34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0 }, /* 1992 */

109.{ 22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },

110.{ 40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },

111.{ 30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1 },

112.{ 49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1 }, /* 1996 */

113.{ 37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 },

114.{ 27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1 },

115.{ 46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },

116.{ 35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 }, /* 2000 */

117.{ 23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },

118.{ 42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },

119.{ 31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 },

120.{ 21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, /* 2004 */

121.{ 39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 },

122.{ 28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 },

123.{ 48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 },

124.{ 37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 }, /* 2008 */

125.{ 25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },

126.{ 44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },

127.{ 33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },

128.{ 22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, /* 2012 */

129.{ 40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },

130.{ 30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 },

131.{ 49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1 },

132.{ 38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 }, /* 2016 */

133.{ 27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 },

134.{ 46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0 },

135.{ 35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 },

136.{ 24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, /* 2020 */

137.{ 42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 },

138.{ 31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 },

139.{ 21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 },

140.{ 40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, /* 2024 */

141.{ 28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 },

142.{ 47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1 },

143.{ 36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },

144.{ 25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 }, /* 2028 */

145.{ 43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 },

146.{ 32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0 },

147.{ 22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 } };

148.149.#define lastyear (firstyear+sizeof(lunarcal)/sizeof(struct taglunarcal)-1)  150.151./* 西历年每月之日数 */

152.int solarcal[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

153.154./* 西历年每月之累积日数, 平年与闰年 */

155.int solardays[2][14] = {

156.{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365, 396 },

157.{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366, 397 } };

158.159./* 求此西历年是否为闰年, 返回 0 为平年, 1 为闰年 */

160.int getleap( int year )

161.{

162.if ( year % 400 == 0 )

163.return 1;

164.else if ( year % 100 == 0 )

165.return 0;

166.else if ( year % 4 == 0 )

167.return 1;

168.else

169.return 0;

170.}

171.172./* 西历农历转换 */

173.int calconv( struct convdate *cd )

174.{

175.int leap, d, sm, y, im, l1, l2, acc, i, lm, kc;

176.if ( cd->source == 0 ) /* solar */

177.{

178.if ( cd->solaryear <= firstyear || cd->solaryear > lastyear )

179.return 1;

180.sm = cd->solarmonth - 1;

181.if ( sm < 0 || sm > 11 )

182.return 2;

183.leap = getleap( cd->solaryear );

184.if ( sm == 1 )

185.d = leap + 28;

186.else

187.d = solarcal[sm];

188.if ( cd->solardate < 1 || cd->solardate > d )

189.return 3;

190.y = cd->solaryear - firstyear;

191.acc = solardays[leap][sm] + cd->solardate;

192.cd->weekday = ( acc + lunarcal[y].baseweekday ) % 7;

193.kc = acc + lunarcal[y].basekanchih;

194.cd->kan = kc % 10;

195.cd->chih = kc % 12;

196.if ( acc <= lunarcal[y].basedays )

197.{

198.y--;

199.cd->lunaryear = cd->solaryear - 1;

200.leap = getleap( cd->lunaryear );

201.sm += 12;

202.acc = solardays[leap][sm] + cd->solardate;

203.}

204.else

205.cd->lunaryear = cd->solaryear;

206.l1 = lunarcal[y].basedays;

207.for ( i=0; i<13; i++ )

208.{

209.l2 = l1 + lunarcal[y].monthdays[i] + 29;

210.if ( acc <= l2 )

211.break;

212.l1 = l2;

213.}

214.cd->lunarmonth = i + 1;

215.cd->lunardate = acc - l1;

216.im = lunarcal[y].intercalation;

217.if ( im != 0 && cd->lunarmonth > im )

218.{

219.cd->lunarmonth--;

220.if ( cd->lunarmonth == im )

221.cd->lunarmonth = -im;

222.}

223.if ( cd->lunarmonth > 12 )

224.cd->lunarmonth -= 12;

225.}

226.else /* lunar */

227.{

228.if ( cd->lunaryear < firstyear || cd->lunaryear >= lastyear )

229.return 1;

230.y = cd->lunaryear - firstyear;

231.im = lunarcal[y].intercalation;

232.lm = cd->lunarmonth;

233.if ( lm < 0 )

234.{

235.if ( lm != -im )

236.return 2;

237.}

238.else if ( lm < 1 || lm > 12 )

239.return 2;

240.if ( im != 0 )

241.{

242.if ( lm > im )

243.lm++;

244.else if ( lm == -im )

245.lm = im + 1;

246.}

247.lm--;

248.if ( cd->lunardate > lunarcal[y].monthdays[lm] + 29 )

249.return 3;

250.acc = lunarcal[y].basedays;

251.for ( i=0; i acc += lunarcal[y].monthdays[i] + 29;

252.acc += cd->lunardate;

253.leap = getleap( cd->lunaryear );

254.for ( i=13; i>=0; i-- )

255.if ( acc > solardays[leap][i] )

256.break;

257.cd->solardate = acc - solardays[leap][i];

258.if ( i <= 11 )

259.{

260.cd->solaryear = cd->lunaryear;

261.cd->solarmonth = i + 1;

262.}

263.else

264.{

265.cd->solaryear = cd->lunaryear + 1;

266.cd->solarmonth = i - 11;

267.}

268.leap = getleap( cd->solaryear );

269.y = cd->solaryear - firstyear;

270.acc = solardays[leap][cd->solarmonth-1] + cd->solardate;

271.cd->weekday = ( acc + lunarcal[y].baseweekday ) % 7;

272.kc = acc + lunarcal[y].basekanchih;

273.cd->kan = kc % 10;

274.cd->chih = kc % 12;

275.}

276.return 0;

277.}

(感谢各位作者)

python年份天干地支代码_农历天干地支算法源代码大全(javascript、vbscript、C#、flash、C++、C等等【转】...相关推荐

  1. 农历天干地支算法源代码大全(javascript、vbscript、C#、flash、C++、C等等)

    农历天干地支算法源代码大全 (javascript.vbscript.C#.flash.C++.C等等) WonSoft编 文章提供计算农历天干地支及当年属相的算法源程序,使用的语言为Javascri ...

  2. python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)

    因为是示例为主,我们将方程组限制在二元一次方程组:x,y两个变量,两个方程.类似这样: 每个方程有两个变量,x和y,形式为:ax+by+c=d 由于这次有了两个方程,我们提取参数的代码就适合提炼为一个 ...

  3. python怎么测试c代码_如何正确测试python中的C-API,C-API返回错误代码

    我的设置 我正在使用Python中的pytest和ctypes测试C库中的函数.C库中的每个函数调用一个嵌入式linux PCI板上的函数,然后C库函数返回一个整数,该整数映射到一组返回代码.如果函数 ...

  4. markdown中引用代码_如何在Markdown中引用您JavaScript源代码

    markdown中引用代码 您是否撰写有关Javascript和Typescript的技术文章? (Do you write technical articles about Javascript a ...

  5. python年份天干地支代码_获取日期对应的农历年天干地支,生肖 范围1900-2100

    using System.Globalization; //获取某年是天干地支年,猫年狗年 /// /// 获取年份天干地支,生肖 /// /// 年月日:2009-09-09 /// 甲子,鼠 pu ...

  6. python年份天干地支代码_好用的Python第三方日历库:sxtwl(可算天干地支)

    import sxtwl lunar = sxtwl.Lunar() Gan = ["甲", "乙", "丙", "丁" ...

  7. 天干地支计算公式_求天干地支的计算方法,

    展开全部 天干:甲.乙.丙.丁.戊.己.庚.辛.壬.癸 地支:子e69da5e887aa62616964757a686964616f31333366303134.丑.寅.卯.辰.巳.午.未.申.酉.戌 ...

  8. python执行txt中代码_【技术分享】文件解压之过 Python中的代码执行

    预估稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 一.前言 Python中负责解压压缩文件的代码实现上并不安全,存在目录遍历漏洞,攻击者可以利用该漏洞覆盖_ ...

  9. 用python画小猪佩奇代码_用Python画小猪佩奇

    猪年农历春节前,朋友圈被一则走心的广告刷屏了.很多伙伴直呼:看哭了.当爷爷电话里听到儿子说「不回来啊」的打击是很沉重的,这位父亲想念自己的儿子和孙子,总想把最好的给他们. 如果你的孩子问你要佩奇,你除 ...

最新文章

  1. 5分钟教你Windows 10中将“运行”固定到开始菜单
  2. 实用!一键生成数据库文档,堪称数据库界的Swagger
  3. 初步学习JS中的闭包
  4. 对象存储、块存储、文件存储的区别
  5. webshpere下载地址
  6. VC中的#pragma指令的用法
  7. 《Apache SkyWalking实战》送书活动结果公布
  8. oracle中 trunc(),round(),ceil(),floor的使用
  9. 元素加了position:absolute则该元素的text-align:center居中失效的解决办法
  10. 根据需要为不同的类设置不同的输出日志名称及日志格式
  11. Vscode合并develop代码分支到master开发分支
  12. 读取指定文件夹限定文件
  13. [再学Python] - 5 - 布尔操作符
  14. 【渝粤教育】国家开放大学2018年春季 0239-21T电子商务物流管理 参考试题
  15. java yuv 裁剪480480_对android录制的NV21视频数据进行旋转(90,180,270)与剪切
  16. linux文件管理器thunar,文件管理器:Nautilus,Thunar,PCManFM,Konqueror,Dolphin,Krusader
  17. 几种经典病毒动力学模型【基于matlab的动力学模型学习笔记_3】
  18. 计算机导论课程知识总结,计算机导论课程论文范文
  19. 数据管理管的是哪些方面
  20. JSD-2204-(业务逻辑开发)-发酷鲨商城front模块-开发购物车功能-Day09

热门文章

  1. vue实现滚动鼠标滚轮切换页面,类似于纵向走马灯、满屏滚动
  2. AX200网卡优先级问题
  3. 有符号类型和无符号类型
  4. Hadoop 真的要死了吗?
  5. OpenStack搭建实战
  6. live555发送H264
  7. 百度_右玉吧吧_史上最厉害的拼音打字高手间的对话
  8. 小米OJ #136 小米兔的轨迹
  9. Python+Selenium模拟126邮箱登录
  10. 硬件(R820T+RTL2832)+RTL1090+adsbscope接收ADS-B信号