十八小子 / 年月 / 儒略日计算公式的解读

分享

   

儒略日计算公式的解读

2017-08-14  十八小子

对儒略日计算公式的解读

转载2016-03-08 23:39:32
标签:天文

一、首先简单介绍一下儒略日

儒略日是法国学者Joseph Justus Scaliger(1540-1609)设计的一种历法,与尤里乌斯·恺撒于公元前45年颁布的儒略历没有关系,不要混淆。儒略日是指从公元-4712年1月1日12时(公元前4713年1月1日12时)开始连续计算得出的天数(不满一日的部分用小数表示)。

二、儒略日的计算公式

设Y为给定年份,M为月份,D为该月日期(可以带小数)。

(1)若M > 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) )。

(3)那么B中加的2又是怎么回事呢?

这是因为,对于1582年,使用我们上面的算法:-A + INT(A/4),得出需要减12天。但是格里高利历其实只抹掉了10天(1582年10月4日下一日直接跳到10月15日),相当于我们的方法多减了2天,所以要把这2天再加上。

这样,B也解释清楚了。

3、 INT( 30.6001*(M+1) ) 

这一部分是计算月份对应的天数的。那么30.6是怎么得到的?M为什么要加1?M=1和2时,为什么要将M变为M+12,同时将Y设为Y-1?最后减的那63天又是哪里来的?

其实这几个疑问是相互关联的,这一块我想了好久都没想明白,直到看到一个论坛的讨论后,才豁然开朗。下面是解释。

一些聪明的人发现了下面的事实:

月份对应天数的计算规律

即先把 1月及2月调到上一年 12个月后面,作 13 及 14 月计算,然后把月数加2再乘30.6,取整数后减63,便得原月份完结时的总日数。这就解释了30.6、63这些数字的来历,以及为什么M=1和2时,要做那些改变。

在计算儒略日时,由于M月还没有完结,所以用M+1计算上一个月完结时的总日数,本月所过的天数就是D了。

好了,到这里就将儒略日计算公式中各部分的含义都解释清楚了。不得不佩服设计者的心思,尤其是最后月份的计算,真是炸裂,太佩服了。

在寻找答案的过程中,发现很多文章都是只知其然不知其所以然,然而最后在一些论坛中看到有很多人像我一样喜欢刨根问底,让我感觉自己也不算是另类。我的答案主要参考了术数纵横论坛中kskfk的回答,以及牧夫论坛中”浪淘沙“的回答,在这里贴出链接。

http://www.fengshui-chinese.com/discuz/viewthread.php?tid=36164

自古人们用年月日来计时,地球月亮太阳,一个公转周期、一个自转周期、一个月相周期不太好协调。日,最准确,年有误差,月就太乱了(是序列号乱,不尊重嫦娥姐)。

以前新年我就用excel拉一拉1年的积日(给一年的日子分发自然序列),但我一直想有个很古老久远的起始日。这次看百科,才知道天文学家们早就发明了儒略日。
http://baike.so.com/doc/6432578-6646255.html

比如今天公元2017/2/2,我喜欢这样标记2017-33(2017年第33日),和有些人喜欢用的2017-5(2017年第5周)差不多。
下图是电脑内存条信息查询,老外制造商就习惯用这种计时方法。



天文和人文我都喜欢,所以我最喜欢这样计时,看下面的表格:


表中有个生命第N日,我本来用的是自己生日计算,因为要贴出来就用了公众人物。
偶认为高晓松老师在大众社科知识传播上做出了不朽的贡献,所以就用其生日举例。从百科上得到生日为1969/11/14-即高晓松生命第1日,到2017/2/2为第17247日(已过了17246日)。
公元2017年2月2日,可写为高晓松17247日,和年号纪年类似。
你可以算算你自己的,算出来不管多少,感觉想必是五味杂陈,时不我待。

表中EXCEL第N日,如果是PC版本的,第1日为1900/1/1,输入日期,然后将单元格格式改为数值,就得到这个数字。

下面这个表,就是积年法纪年。


公元2017年,也可以这样表述:
黄帝4714年
天朝69年
国富论242年(国富论发表于1776年)
美利坚242年(纯属巧合)
集思录6年(哈哈)
儒略6730年
注意,这个儒略纪年是我自编的,没这回事,你可以搜搜儒略年的定义。
把儒略起始日的那1年,设为儒略纪年第1年,就得到这个儒略纪年,意思是已过去了6729年。

传统上,中国人说年龄说虚岁,那么网名+虚岁,就相当于年号纪年法。
假设今年天书108岁,割总98岁,帅牛18岁,那么公元2017年,就可以在个人日记里写为:
天书108年
割总98年
帅牛18年

附件里有excel表格,你可将里面的积日改成你自己的。

明日立春


汉宫春·立春日

辛弃疾

春已归来,看美人头上,袅袅春幡。无端风雨,未肯收尽余寒。
年时燕子,料今宵梦到西园。浑未办,黄柑荐酒,更传青韭堆盘?

却笑东风,从此便薰梅染柳,更没些闲。闲时又来镜里,转变朱颜。
清愁不断,问何人会解连环?生怕见花开花落,朝来塞雁先还。

儒略日的计算

 (2013-03-01 21:22:07)


      儒略日(Julian day)是指由公元前4713年1月1日,协调世界时中午12时开始所经过的天数,多为天文学家采用,用以作为天文学的单一历法,把不同历法的年表统一起来。 儒略日是一种不用年月的长期纪日法,简写为JD。是由法国纪年学家史迦利日(Joseph Justus Scliger 1540年-1609年)在1583年所创,这名称是为了纪念他的父亲——意大利学者Julius Caesar Scaliger(1484年-1558年)。以儒略日计日是为方便计算年代相隔久远或不同历法的两事件所间隔的日数。
由公历年月日化为儒略日公式:

J = day-32075+
        
        [(1461(year+4800+[(month-14)/12]/4]+
        
        367[(month-2-[(m-14)/12])/12]-
        
        [(3[(y+4900+[(m-14)/12])/100]/4)]

      某日某一时刻对应的儒略日为:

JD = J-0.5+hour/24+minute/1440+second/86400

   如用到毫秒、微秒与纳秒均转至秒再进行计算。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>