以文本方式查看主题 - 中华农历论坛 (http://bbs.nongli.net/index.asp) -- 历法知识 (http://bbs.nongli.net/list.asp?boardid=2) ---- [求助] 根据农历日期转换成儒略日值的最简方法 (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=46440) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:秦汉昌 -- 发布时间:2011/4/30 13:15:00 -- [求助] 根据农历日期转换成儒略日值的最简方法
根据农历日期转换成儒略日值的最简方法,要求: 1、精确到日就可以了: 2、以黄帝纪年进行年计数或者以1984年开始进行年计数都可以; 3、一定要能通过农历的年计数来确定当年的准确的第一个朔日(、冬至、正月初一、春分都可以),当然,如果得到了农历日期对应的儒略日值,那么一定能得到第一个朔日的准确儒略日值,由于西历年与农历年的不同,而且农历年的计算比西历年较复杂,所以,直接用西历年来替农历年来求农历某年垢首朔日,如果将两个科冬至之间所有月的朔日先求出,则有点浪费,呵呵 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:秦汉昌 -- 发布时间:2011/4/30 19:46:00 -- 我起初设计的是查表法:
用压缩数据来存诸农历信息
0x0000 的形式
其中 ox0 至 0x8 - 1 保存闰月值
0x8 到 0x8000 保存 月大小标志 次序为: 1 2 3 4 5 6 7 8 9 10 11 12 闰 月的大小二进制位
1、用 <被压缩数> 1 15 左移位 或 的形式输入数据 (移15位表示输入一月大的二进制标志,小月无须 进行 或 操作)
2、用 <被压缩数> 0x10000 <建寅为正的月序数> 右移位 与 的形式获得该 的月大小信息
3、用 <被压缩数> 0xf 与 的形式 获得闰月值
4、用 348 加上 月大小调整数 为 某年天数
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:浪-淘-沙 -- 发布时间:2011/4/30 22:16:00 -- 农历朔日没有简单的算法,所以你的要求很难实现的。
至于查表法,估计代码很长,计算速度不一定很快。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:秦汉昌 -- 发布时间:2011/5/3 22:52:00 -- 查表法,从代码上讲,应该不长,大概10K左右,但是,它只能得到一年首月之朔日,而且,不方便根据实历修正,更重要的,不好精算其它星历数据。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:浪-淘-沙 -- 发布时间:2011/5/4 9:29:00 -- 以下是引用秦汉昌在2011-5-3 22:52:00的发言:
查表法,从代码上讲,应该不长,大概10K左右,但是,它只能得到一年首月之朔日,而且,不方便根据实历修正,更重要的,不好精算其它星历数据。 你要搞查表法,可以根据戴大金及其他朋友的“金盘子”、“银盘子”的压缩算法原理进行数据压缩。那么代码可以大大降低的。 他们的算法,因为要卖钱(出书),所以目前不会公开的。
但你自己可以钻研出一套新的压缩算法来。可以把朔、望、节气的时间精确到分钟(而不是精确到日)。而代码可能还会很短的。
当然了,查表法毕竟不能作为真正的星历,你要查朔日三天后的月亮位置,就很难有精确的数据了。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:xjw01 -- 发布时间:2011/5/5 21:41:00 -- 用天文算法排年历:
1、先计算一年(至少一年)的气朔时刻 2、按照农历规则排算,得到各月的大小,闰月,每月的月首的需略日等信息
实际上,气朔计算出来后,每初一对应的儒略日就已知了。
显然,楼主的问题,实际上就是农历计算的问题。
还有一种方法就是查表法。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:ddjhnshdx -- 发布时间:2012/6/18 10:38:00 -- 如果辅助干支这项日脚来推儒略日,就很容易。没有干支、星期等项目的话,那就要用天文算法,或压缩记忆法或直接查表法。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:txwdx -- 发布时间:2012/6/19 18:59:00 -- 从1912年正月初一甲子(2419451)起算 1、根据年份,估计月数。年数*12.36827,截尾取整,然后加上月份(闰月记前一个月号)。 今年六月初六,(2012-1912)*12.36827=1236 1236+06=1242 今年五月初五,(2012-1912)*12.36827=1236 1236+05=1241 今年闰月十二,(2012-1912)*12.36827=1236 1236+04=1240 今年四月十八,(2012-1912)*12.36827=1236 1236+04=1240 今年三月初三,(2012-1912)*12.36827=1236 1236+03=1239 今年二月初二,(2012-1912)*12.36827=1236 1236+02=1238 今年正月十五,(2012-1912)*12.36827=1236 1236+01=1237 2、根据月数,估计天数。(月数-1)*29.53058,截尾取整,然后加上日期。 六月初六 1241*29.53058=36647 36647+06=36653 五月初五 1240*29.53058=36617 36617+05=36622 闰月十二 1239*29.53058=36588 36588+12=36600 四月初八 1239*29.53058=36588 36588+08=36596 三月初三 1238*29.53058=36558 36558+03=36561 二月初二 1237*29.53058=36529 36529+02=36531 正月十五 1236*29.53058=36499 36499+15=36514 3、用干支校正。日数/60截尾取整,然后再乘以60,然后再加上当前干支。所得结果减去第2步的结果小于-1时,将所得结果加60。 36653-(36653%60)=36600,今年六月初六为丙戌(23),36600+23=36623,36623-36653=-30,36623+60=36683 36622-(36622%60)=36600,今年五月初五为乙卯(52),36600+52=36652,36652-36622=30,ok 36600-(36600%60)=36600,今年闰月十二为癸巳(30),36600+30=36630,36630-36600=30,ok 36596-(36596%60)=36540,今年四月初八为己未(56),36540+56=36596,36596-36596=0,ok 36561-(36561%60)=36540,今年三月初三为甲申(21),36540+21=36561,36561-36561=0,ok 36531-(36531%60)=36480,今年二月初二为甲寅(51),36480+51=36531,36531-36530=0,ok 36514-(36514%60)=36480,今年正月十五为丁酉(34),36480+34=36514,36514-36514=0,ok 今年天祝节为1912年春节起的第36683日,2419450+36683=2456133。无误 今年端午节为1912年春节起的第36652日,2419450+36652=2456102。无误 今年儿童节为1912年春节起的第36630日,2419450+36623=2456080。无误 今年浴佛节为1912年春节起的第36596日,2419450+36606=2456046。无误 今年上巳节为1912年春节起的第36561日,2419450+36563=2456011。无误 今年春龙节为1912年春节起的第36531日,2419450+36531=2455981。无误 今年元宵节为1912年春节起的第36514日,2419450+36514=2455964。无误 [此贴子已经被作者于2012-6-21 9:58:53编辑过] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:txwdx -- 发布时间:2012/6/20 14:59:00 --
[此贴子已经被作者于2012-6-20 18:39:49编辑过] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:浪-淘-沙 -- 发布时间:2012/6/20 16:39:00 --
txwdx朋友
请用1984-85年度(甲子年)闰十月、十一月的日期。 2033-34年度(癸丑年)闰十一月、十二月的日期。进行试错测试,看看你的算法会不会有例外的? |