以文本方式查看主题

-  中华农历论坛  (http://bbs.nongli.net/index.asp)
--  历法知识  (http://bbs.nongli.net/list.asp?boardid=2)
----  [求助]农历排月序的规则是怎样的?  (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=17514)

--  作者:linkerson
--  发布时间:2009/3/24 21:38:00
--  [求助]农历排月序的规则是怎样的?

我目前已成功地算出“节气、朔”的交接时刻,但还了解农历排月序的规则。比如,某个“朔”到底是农历二月初一,还是三月初一……,在此希望能够得到各位朋友的帮助,谢谢!

 


--  作者:浪-淘-沙
--  发布时间:2009/3/24 22:47:00
--  

现在用夏正,所以冬至所在月的朔为:十一月初一。

其它的月份就可以类推了。

如果你计算时,发现二个冬至月之间有十二个朔望月(不包含二个冬至月本身的朔望月),那么就多出来一个月了,就得安排闰月了。

闰月的设置是:冬至月之后第一个无中气的月。(前提是多出一个朔望月。否则即使出现无中气月,也不能置闰)。


--  作者:linkerson
--  发布时间:2009/3/25 17:45:00
--  

多谢 浪-淘-沙 兄的讲解!

所以,现在初步想法是:求出两个冬至的时间,暂定为“冬至1”和“冬至2”,再求出“冬至1”之前的第一个朔月,应该即为“十一月初一”。接下来,再连续算出12个朔月时间做成数组,把当前算出的最后一个朔月时间与“冬至2”时间比较,不难看出两个冬至之间到底有11还是12个朔月了,即可判断该不该置闰了。闰哪个月,还要再加判断!有点麻烦!不知想法对不对啊!


--  作者:浪-淘-沙
--  发布时间:2009/3/25 20:29:00
--  

差不多吧。具体的算法实现,可以参考许剑伟先生的寿星万年历的相关帖子。


--  作者:linkerson
--  发布时间:2009/3/27 10:31:00
--  

算法已经实现了,能够正确排出“月序”和正确判断“该不该置闰、闰哪个月”了。

不需置闰的情况是比较简单的。关于置闰,起初我还想用二维数组,但参考“寿星”后发现是自己把问题想得复杂了。在此谢过浪-淘-沙兄!

关于“农历大、小月”是不是只能两个朔月之间的天数差加以判断?差30天为大月,否则为小月?有没有更简的方法?

希望对此有研究的朋友,能够提供帮助!谢谢!


--  作者:浪-淘-沙
--  发布时间:2009/3/27 12:22:00
--  
以下是引用linkerson在2009-3-27 10:31:00的发言:

算法已经实现了,能够正确排出“月序”和正确判断“该不该置闰、闰哪个月”了。

不需置闰的情况是比较简单的。关于置闰,起初我还想用二维数组,但参考“寿星”后发现是自己把问题想得复杂了。在此谢过浪-淘-沙兄!

关于“农历大、小月”是不是只能两个朔月之间的天数差加以判断?差30天为大月,否则为小月?有没有更简的方法?

希望对此有研究的朋友,能够提供帮助!谢谢!

这个在定朔历法里,应当是最好的判断方法了。定朔历法里,某个月的是大是小,无法事先判断的。只能实际去计算月长。

定朔历法似乎从唐朝中期开始用的(同时废除19年7闰这个闰周,改为当闰则闰)。至今也有一千二三百年了。你若翻一下最近一千年历书,会发现月的大小应当是无规律的。

所以除了实际计算外,我也找不出更简单的判断大小月的方法。

春光版主在历法知识百问百答里提到每月初二看月牙的大小来判断本月是大还是小,这个在程序里不容易实现的。

或者换一种说法,用定朔时刻来判断月大月小。如果定朔时刻在夜里23点,这个月往往是大月。如果在凌晨1点,这个月往往是小月。在其它时间,那么这个月是大是小,不容易判断。

所以还不如直接计算每个朔的日期,下个朔的日期减去这个朔的日期(日期用儒略日(但还要先转换成北京时间),要取整,不能四舍五入),若有30天就是大月,若是29天就是小月。目前还没出现28天及31天的。这是因为朔望月的周期所限定的。

相对来说,定气法规定的干支月,每月最长可以达到31天(若仅仅看日期不看时辰32天也有的),最短有28天。这也是十二气历难以推行的可能原因之一(沈括那个时代用平气法,月长相对比较稳定,不会有28天的情况。但若十二气历一直用到现在的定气法,那么其缺点就很大了(大月31天或32天,小月28天)。)


--  作者:wanghq
--  发布时间:2009/4/12 20:16:00
--  
农历比其它历法包含更多的天文信息。