中华农历论坛知识讨论区历法知识 → 关于农历算法的一些讨论


  共有41842人关注过本帖树形打印

主题:关于农历算法的一些讨论

帅哥哟,离线,有人找我吗?
历用五百年
  11楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:30 积分:324 威望:0 精华:0 注册:2006/11/13 14:35:00
  发帖心情 Post By:2006/12/7 20:17:00

我也不要和公历扯在一起,因为这里面已经包括了阳历的成分

而且在公历未引进之前,老百姓都只用农历进行思维

我另外所要的,只是在古代当时使用的历法,即使它到后来和实际情况已经不符合

只要它不把日子记掉就行了

也就是说,不要在当时通行的干支记日法中,今天是甲子,明天就丙寅了,而把中间一天记掉了就行了

现在我只能对着《二十五史》的帝王《纪》中,一天天的数,总会数完的


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
谈天
  12楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:36 积分:457 威望:0 精华:0 注册:2006/9/2 1:16:00
  发帖心情 Post By:2006/12/10 23:21:00

楼主的方法是用于平气经朔下.

大小月的安排,在四分历中,小余达到441为大月.


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
春光
  13楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:917 积分:7577 威望:10 精华:1 注册:2005/3/17 11:37:00
  发帖心情 Post By:2006/12/13 13:52:00

自中国的每一个朝代的日期时须当时使用的历法才有意义,即使用当时的历法不够准确。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xianfajushi
  14楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:2 积分:212 威望:0 精华:0 注册:2008/5/9 22:46:00
[原创]农历年算法ASP。NET2.0-侯育胜  发帖心情 Post By:2008/5/9 22:50:00

不过我发现农历网提供的查询到2100年农历其中闰月大小有些错误,表明闰月小的实际上有三十,而表明闰月大的却只有二十九,为何?
//农历年算法ASP。NET2.0-侯育胜依据网络找到资料参考编写,希望有助于人,若有错误处,请高手指点。1900-2100年。

        string TianGan = "庚辛壬癸甲乙丙丁戊己", DiZhi = "申酉戌亥子丑寅卯辰巳午未", ShengXiao = "猴鸡狗猪鼠牛虎兔龙蛇马羊", strTime = System.DateTime.Now.ToString();

        string Nl_Yue = "正二三四五六七八九十寒腊", Nl_Ri = "初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十";

        string Nian = DateTime.Now.Year.ToString(), Yue = DateTime.Now.Month.ToString(), Ri = DateTime.Now.Day.ToString();

        int Tg = Convert.ToInt16(Nian.Substring(Nian.Length - 1, 1));

        int Dz = Convert.ToInt16(Nian) % 12;

        //农历月算法

        // 下面是一个关于C#的农历算法

        // 日期数据定义方法如下

        // 前12个字节代表1-12月为大月或是小月,1为大月30天,0为小月29天,闰月不计。

        // 第13位为闰月的情况,1为大月30天,0为小月29天,第14、15位为闰月的月份,使用10进制表示,如果没有闰月则为000。

        // 最后4位为当年家农历新年-即农历1月1日所在公历的日期,如0131代表1月31日。

        string[] N_L_B = new string[] {

     "0100101101101080131", "0100101011100000219", "1010010101110000208", "0101001001101050129", "1101001001100000216", "1101100101010000204",

     "0110101010101040125", "0101011010100000213", "1001101011010000202", "0100101011101020122", "0100101011100000210", "1010010011011060130",

     "1010010011010000218", "1101001001010000206", "1101010101001050126", "1011010101010000214", "0101011010100000204", "1001011011010020123",

     "1001010110110000211", "0100100110111070201", "0100100110110000220", "1010010010110000208", "1011001001011050128", "0110101001010000216",

     "0110110101000000205", "1010110110101040124", "0010101101100000213", "1001010101110000202", "0100100101111020123", "0100100101110000210",

     "0110010010110060130", "1101010010100000217", "1110101001010000206", "0110110101001050126", "0101101011010000214", "0010101101100000204",

     "1001001101110030124", "1001001011100000211", "1100100101101070131", "1100100101010000219", "1101010010100000208", "1101101001010060127",

     "1011010101010000215", "0101011010100000205", "1010101011011040125", "0010010111010000213", "1001001011010000202", "1100100101011020122",

     "1010100101010000210", "1011010010101070129", "0110110010100000217", "1011010101010000206", "0101010110101050127", "0100110110100000214",

     "1010010110110000203", "0101001010111030124", "0101001010110000212", "1010100101010080131", "1110100101010000218", "0110101010100000208",

     "1010110101010060128", "1010101101010000215", "0100101101100000205", "1010010101110040125", "1010010101110000213", "0101001001100000202",

     "1110100100110030121", "1101100101010000209", "0101101010101070130", "0101011010100000217", "1001011011010000206", "0100101011101050127",

     "0100101011010000215", "1010010011010000203", "1101001001101040123", "1101001001010000211", "1101010100101080131", "1011010101000000218",

     "1011011010100000207", "1001011011010060128", "1001010110110000216", "0100100110110000205", "1010010010111040125", "1010010010110000213",

     "1011001001011100202", "0110101001010000220", "0110110101000000209", "1010110110101060129", "1010101101100000217", "1001001101110000206",

     "0100100101111050127", "0100100101110000215", "0110010010110000204", "0110101001010030123", "1110101001010000210", "0110101100101080131",

     "0101101011000000219", "1010101101100000207", "1001001101101050128", "1001001011100000216", "1100100101100000205", "1101010010101040124",

     "1101010010100000212", "1101101001010000201", "0101101010101020122", "0101011010100000209", "1010101011011070129", "0010010111010000218",

     "1001001011010000207", "1100100101011050126", "1010100101010000214", "1011010010100000214", "1011010101010050123", "1010110101010000210",

     "0101010111011100131", "0100101110100000219", "1010010110110000208", "0101000101111070128", "0101001010110000216", "1010100100010000205",

     "0111100101001050125", "0110101010100000212", "1010110101010000201", "0101101101011030121", "0100101101100000210", "1010011101110070129",

     "1010010011100000217", "1101001001100000206", "1110101001101060126", "1101010100110000213", "0101101010100000203", "0111011010101040123",

     "1001011011010000211", "0100101011111120131", "0100101011010000219", "1010010011010000208", "1101000010110070127", "1101001001010000215",

     "1101010100100000204", "1101110101001060124", "1011010110100000212", "0101011011010000201", "0101010110111030122", "0100100110110000210",

     "1010010101110080130", "1010010010110000217", "1010101001010000206", "1011001001011060126", "0110110100100000214", "1010110110100000202",

     "0100101101101040123", "1001001101110000211", "0100100111110090201", "0100100101110000219", "0110010010110000208", "0110100010101070128",

     "1110101001010000215", "0110101100100000204", "1010011011001050124", "1010101011100000212", "1001001011100000202", "1101001011100040121",

     "1100100101100000209", "1101010101010080129", "1101010010100000217", "1101101001010000205", "0101110101010060126", "0101011010100000214",

     "1010011011010000203", "0101010111010050123", "0101001011010000211", "1010100110110090131", "1010100101010000219", "1011010010100000207",

     "1011011010100070127", "1010110101010000215", "0101010110100000205", "1010101110100050124", "1010010110110000212", "0101001010110000202",

     "1011001001110040122", "0110100100110000209", "0111001100110080129", "0110101010100000217", "1010110101010000206", "0100101101011060126",

     "0100101101100000214", "1010010101110000203", "0101010011100050124", "1101001001100000210", "1110100101100090130", "1101010100100000218",

     "1101101010100000207", "0110101010101070127", "0101011011010000215", "0100101011100000205", "1010100111010050125", "1010010011010000212",

     "1101000101010000201", "1111001001010030121", "1101010100100000209", };





        int N_Zd = 2100, N_Zx = 1900, N_L_N = 0, N_L_Y = 0, N_L_R = 0;// string Nian = Nian;





        if (Convert.ToInt16(Nian) <= N_Zd || Convert.ToInt16(Nian) >= N_Zx) 

        {

            N_L_Y = Convert.ToInt16(N_L_B[Convert.ToInt16(Nian) - N_Zx].Substring(15, 2));

            N_L_R = Convert.ToInt16(N_L_B[Convert.ToInt16(Nian) - N_Zx].Substring(17, 2));

        }

        if ((Convert.ToInt16(Yue) < N_L_Y) || ((Convert.ToInt16(Yue) == N_L_Y) && (Convert.ToInt16(Ri) < N_L_R)))

        {

            N_L_N = Convert.ToInt16(Nian);

            N_L_N--;

            // 农历新年月份

            N_L_Y = Convert.ToInt16((N_L_B[N_L_N - N_Zx].Substring(15, 2)));

            // 农历新年日子

            N_L_R = Convert.ToInt16((N_L_B[N_L_N - N_Zx].Substring(17, 2)));

        }

        else { N_L_N = Convert.ToInt16(Nian); }





        // 计算农历月

        DateTime GlDateTime = new DateTime(Convert.ToInt16(Nian), Convert.ToInt16(Yue), Convert.ToInt16(Ri));

        DateTime NlDateTime = new DateTime(N_L_N, N_L_Y, N_L_R);

        TimeSpan Ri_Qi_Ca = GlDateTime - NlDateTime;

        int TianShu = Ri_Qi_Ca.Days;





        N_L_Y = 1; N_L_R = 1;

        bool Run_Yue = false;

        for (int i = 0; i < TianShu; i++)

        {

            N_L_R++;

            if (N_L_R == 30 + Convert.ToInt16(N_L_B[N_L_N - N_Zx].Substring(N_L_Y - 1, 1)) || (Run_Yue && (N_L_R == 30 + Convert.ToInt16(N_L_B[N_L_N - N_Zx].Substring(12, 1)))))

            {

                if ((Run_Yue == false) && (N_L_Y == Convert.ToInt16(N_L_B[N_L_N - N_Zx].Substring(13, 2))))

                { Run_Yue = true; }

                else

                { Run_Yue = false; N_L_Y++; }

                N_L_R = 1;

            }

            else

            { }

        }

        //转换计算农历日

        string S_N_L_R = Nl_Ri.Substring((N_L_R - 1) * 2, 2);

        //转换计算农历月

        string S_N_L_Y = Nl_Yue.Substring(N_L_Y - 1, 1) + "月";

        if (Run_Yue)

        { S_N_L_Y = "闰" + N_L_Y; }

        //转换农历年string S_N_L_N = Convert.ToString(N_L_N, 10) + "年";

        

        //输出农历日期总合

        Label1.Text += TianGan.Substring(Tg, 1) + DiZhi.Substring(Dz, 1) + "年【" + ShengXiao.Substring(Dz, 1) + "】" + S_N_L_Y + S_N_L_R + "日";

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
春光
  15楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:917 积分:7577 威望:10 精华:1 注册:2005/3/17 11:37:00
  发帖心情 Post By:2008/5/23 21:08:00

  这是以前的列表法的算法,天文算法的农历算法可以看一下置顶的几个贴子。

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
mustang
  16楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:216 威望:0 精华:0 注册:2008/11/29 18:58:00
  发帖心情 Post By:2008/11/29 22:58:00

請問一下

有沒有人試著用 EXCEL 做精準的節氣嗎


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
浪-淘-沙
  17楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:2068 积分:4263 威望:5 精华:4 注册:2008/11/13 21:03:00
  发帖心情 Post By:2008/11/30 21:35:00

以下是引用mustang在2008-11-29 22:58:00的发言:

請問一下

有沒有人試著用 EXCEL 做精準的節氣嗎

许剑伟兄(xjw01)已经公开了他编算历法的源程序,你若仔细看看,就会发现程序很复杂的.

要想精确推算节气时刻,要考虑的东西很多.比如要把各大行星对地球的摄动考虑进去.所以若用EXCEL表来制作,很难计算保证精度的.

而楼主提出的推算节气,朔望时刻的思想,其实本身不够精确的.

楼主以为地球的回归年周期是365.2422天,那么今年的春分时刻加上这个周期,就是明年的春分了.其实完全不是这样的.因为回归年周期是多年的平均值,不是每年都等长的(这主要是各大行星对地球的摄动造成的).

同样的,春分时刻加上30.4377日(二个中气平均间隔长度),不可能是谷雨的时刻.

首先,节气只是把黄道进行等分,但由于地球公转近日点快,远日点慢,所以各节气的长度不等长.

其次,各大行星对地球的摄动不是每时每刻都均匀的.这使得不同年份的每一个节气的长度也不完全一样的.比如

2008年春分3月20日13:48:16,谷雨4月20日00:51:08,二者相隔30天11小时2分52秒.

2007年春分3月21日08:07:26,谷雨4月20日19:07:04,二者相隔30天10小时59分38秒.

2007年的春分比2008年的短3分钟14秒.

你说,用EXCEL表能算出这么准确的数据吗?若能的话,这个EXCEL表肯定非常复杂了.估计没人会有这个耐心去编EXCEL的宏运算的.


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
总数 17 上一页 1 2

返回版面帖子列表

关于农历算法的一些讨论








签名