以文本方式查看主题

-  中华农历论坛  (http://bbs.nongli.net/index.asp)
--  历法知识  (http://bbs.nongli.net/list.asp?boardid=2)
----  [求助]帮我看看这个算法,怎么总是相差十天  (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=16408)

--  作者:秦汉昌
--  发布时间:2008/12/25 1:37:00
--  [求助]帮我看看这个算法,怎么总是相差十天
装载 D:\\DOWNLOADS\\汉语编程\\新词汇集\\由儒略日推算历日.CHP
。 ★
2008 12 24.0 由儒略日推算历日 ★...
看数摞 [3] 1 3 2009 ★...
2008 12 22.0 由儒略日推算历日 ★......
看数摞 [6] 1 3 2009 1 3 2009 ★......
2008 12 22.0 1 由儒略日推算历日 看数摞
数摞顶有不同类型的数进行运算!
2008 12 1.0 由儒略日推算历日 看数摞 [3] 1 3 2009 ★...
2007 12 24.0 由儒略日推算历日 看数摞 [6] 1 3 2009 1 3 2008 ★......
2007 12 1.0 由儒略日推算历日 看数摞 [9] 1 3 2009 1 3 2008 1 3 2008 ★......

--  作者:秦汉昌
--  发布时间:2008/12/25 1:38:00
--  

依原始资料如下:

由儒略日推算历日

将JD加上0.5,令 Z 为其整数部分,F 为尾数(小数)部分。

若 Z < 2299161,取A = Z

若 Z 大于等于2299 161,计算 α=INT((Z-1867216.25)/36524.25) ,A=Z+1+α-INT(α/4)

然后计算

B = A+1524

C = INT((B-122.1)/365.25)

D = INT(365.25C)

E = INT((B-D)/30.6001)

该月日期(带小数部分)则为:d = B - D - INT(30.6001E) + F

月份m为:
IF E < 14 THEN m = E – 1
IF E=14 or E=15 THEN m = E – 13

年份为y:
IF m>2 THEN y = C – 4716 IF m =1 or m=2 THEN y = C – 4715

这个公式里求E时用的数30.6001不能代之以30.6,哪怕计算机没有先前所说的问题。否则,你得到的结果会是2月0日而不是1月31日,或者4月0日而不是3月31日。


--  作者:秦汉昌
--  发布时间:2008/12/25 1:41:00
--  
装载 D:\\DOWNLOADS\\汉语编程\\新词汇集\\由儒略日推算历日.CHP
。 ★
2008 12 24.0 由儒略日推算历日 ★...
看数摞 [3] 1 3 2009 ★...
2008 12 22.0 由儒略日推算历日 ★......
看数摞 [6] 1 3 2009 1 3 2009 ★......
2008 12 22.0 1 由儒略日推算历日 看数摞
数摞顶有不同类型的数进行运算!
2008 12 1.0 由儒略日推算历日 看数摞 [3] 1 3 2009 ★...
2007 12 24.0 由儒略日推算历日 看数摞 [6] 1 3 2009 1 3 2008 ★......
2007 12 1.0 由儒略日推算历日 看数摞 [9] 1 3 2009 1 3 2008 1 3 2008 ★.......
.
2007 10 1.0 由儒略日推算历日 看数摞 [12] 1 3 2009 1 3 2008 1 3 2008 1 3 2008
 ★........
2007 6 1.0 由儒略日推算历日 ★........
看数摞 [15] 1 3 2009 1 3 2008 1 3 2008 1 3 2008 1 3 2007 ★........

--  作者:秦汉昌
--  发布时间:2008/12/25 1:42:00
--  

不知原始数据有问题,还是我的程序没编好,呵呵


--  作者:浪-淘-沙
--  发布时间:2008/12/25 8:07:00
--  
如果正好差十天,那么你忘了1582年10月4日的第二天是1582年10月15日.中间的10月5日到10月14日已经被人为抹去了.
--  作者:秦汉昌
--  发布时间:2008/12/25 20:47:00
--  
呵呵,不好意思,是我自己少了一个符号所致,现在已经测试,能正常使用,并发表于本版:儒略日推算历日.CHP