啥是儒略历它和公历怎样转换
你说的是儒略日吧……儒略日(Julian day,JD)是指由公元前4713年1月1日,协调世界时中午12时开始所经过的天数,多为天文学家采用,用以作为天文学的单一历法,把不同历法的年表统一起来。如果计算相隔若干年的两个日期之间间隔的天数,利用儒略日就比较方便。
■网友
原文在我的博客上,链接:对儒略日计算公式的解读_Spark036_新浪博客
一、首先简单介绍一下儒略日儒略日是法国学者Joseph Justus Scaliger(1540-1609)设计的一种历法,与尤里乌斯·恺撒于公元前45年颁布的儒略历没有关系,不要混淆。儒略日是指从公元-4712年1月1日12时(公元前4713年1月1日12时)开始连续计算得出的天数(不满一日的部分用小数表示)。
二、儒略日的计算公式设Y为给定年份,M为月份,D为该月日期(可以带小数)。
(1)若M \u0026gt; 2,Y和M不变;若 M =1或2,以Y–1代Y,以M+12代M,换句话说,如果日期在1月或2月,则被看作是在前一年的13月或14月。
(2)对格里高利历有:A = INT(Y/100), B = 2 - A + INT(A/4);
对儒略历,取 B = 0
(3)要求的儒略日即为:JD = INT( 365.25*(Y+4716) ) + INT( 30.6001*(M+1) ) + D + B - 1524.5
注意:(1)公式中的INT( )是取整的意思,由于不同的计算机语言对负数取整所采用的操作不同,所以本公式使用了一些技巧,避免出现负数,INT( )只对正数取整;(2)本公式适用于计算-4712年1月1日12时以后的任何日期的儒略日,不使用于此之前的日期。
三、对儒略日公式的解读1、首先看第一部分:INT( 365.25*(Y+4716) )
这部分明显是用来计算年份对应的日数的。
(1)这里的第一个疑问是:为什么年份要加4716,而不是4712,计算儒略日的起始时间明明是-4712年1月1日12时啊?
【啥是儒略历它和公历怎样转换】 答:根据公式的第一条,计算-4712年1月份和2月份的儒略日时,年份会变成-4713,如果加4712,会出现负数,对负数取整有歧义,不利于编程实现,应避免公式计算过程中出现负数,因此,不能加4712。(至于为什么会有第一条规则,后面会详细解释)
(2)这时会出现第二个疑问:那直接加4713不就行了,就不会出现负数了,为什么要加4716?
答:这里加的数必须是四的倍数。为什么呢?我们注意到,前面的被乘数是365.25,该数乘以1、2、3时,取整时,小数部分都会被舍掉;当乘以4时,0.25就会积累到一个整数,取整时就不会被舍掉。也就是每四年会多一天,即四年一闰。因此,年份的加数必须是四的倍数,这样,就不会影响年份的平闰。例如-4709年是平年,乘积中的小数部分应该被舍掉,但是如果加数是4713,0.25*4变成整数了,就不会被舍掉,相当于天数多了一天。这样就给公式的设计上带来了很大的麻烦。因此加数必须是4的倍数,而且要大于4712,那么里的最近的整数就是4716了,当然4720也行,只需要在后面多减365.25*4 = 1461天就行。
这样,这部分就解释清楚了。由于这里多算了四年的天数,所以公式最后要减去365.25*4 = 1461天。又由于儒略日是从中午12点开始计算的,所以还需要减去0.5天。这样总共减了1461.5天,与公式后的1524.5天还差63天。至于这63天来自何处,后面会详细解释。
2、B也是跟年份有关的天数,所以这一节先解释一下B的含义。
其实,B是为了调整格里高利历和儒略历的差别而引入的。
(1)如果计算的日期在儒略历的范围内,即公元1582年10月5日之前,那么B=0。
因为儒略历规定四年一闰,所以使用INT( 365.25*(Y+4716) )计算出的年份对应的日数是正确的,不需要调整。
(2)如果计算的日期在格里高利历的范围内,即公元1582年10月4日之后,那么就需要计算B了。
因为格里高利历规定四年一闰,但是遇世纪年(整百年份)时,必须被400整除才是闰年。使用INT( 365.25*(Y+4716) )计算出的天数没有考虑这一点,所以需要在此基础上,减去世纪年的个数(A),再加上世纪年中,能被400整除的个数( INT(A/4) )。