TA的每日心情 | 开心 19 小时前 |
---|
签到天数: 2802 天 [LV.Master]无
|
本帖最后由 heinsect 于 2015-2-1 18:13 编辑 6 }# a0 J' ?& g' i
) `$ W- X% G) F) s0 O程序员计算日期是用儒略日的。
4 ? g5 Q8 N: ]: C- I7 h/ W, U' }; ]0 i9 k
儒略日中的儒略和儒略历中的儒略的关系嘛,只是因为儒略日的发明人的爷爷葱白凯撒,给儿子用了大帝的名字。刚好儒略历也用了大帝的名字。
1 }# e* t1 @6 A4 U& k, Q% S5 l/ U: N, u3 H0 z. D( |+ {4 z& `/ w
单用日期的话,儒略日是从某天开始的一个日的整数。两个儒略日的差值就是相差的天数。这样想计算两个日期间的差值,计算星期几就很简单了。至于那个开始日期,儒略日的零点,用起来的时候谁也不关心,我就不讲了。
: c: v# v* i: ]0 M A( O$ [+ s( W; Z$ a6 g! I/ J; a
从格里高利历日期算儒略日(JDN)的公式是这个样子的:
3 e* n @$ r$ \8 w. O& z% ~+ f0 G! ~
先要改一下年月:
4 Q5 M& v r1 h; ^( L0 a$ t0 k![]()
' Y% D8 a; i# k: C# n6 D: [9 e: L S. v: r! C7 Y; J
上面这组公式的结果呢,差不多是这个意思:
8 i2 D/ H$ w+ q e8 R三月 m = 0, y=y
6 L6 Q; P( k9 l' O$ Q0 [, R) v..., P+ Z6 F5 [% q% Z9 y2 j7 ?
十二月 m=9, y=y; l; R2 E0 r5 N! F2 F
一月 m = 10, y=y-1( @! _9 X' V* S- R
二月 m = 11, y=y-1" s* K* H6 J6 g
! h8 Y5 x; A8 A
那个4800,是个计算零点,大概在公元前4801年,是和前面所说的那个零点相关的。+ B9 ~' e6 U7 `) K
然后计算儒略日的公式长是这个样子的:# d; L0 k6 C# V5 Y: A7 ^
y# m/ I p4 L( ~7 F
" ?2 T: a; j0 e# `1 W: B
0 ~( t9 u" u" `7 z, y3 z: p/ O" K这个公式中最巧的部分是 floor((153m+2)/5), 做出的效果嘛,看这个表:
" B, v( L$ o* _- O2 Z* xMar–Jul:31 30 31 30 31Aug–Dec:31 30 31 30 31Jan–Feb:31 28
8 e6 C# ~; t d6 ]1 _6 q最后面的那个系数,是相对于原点的修正值。原公式算出来的值一般太大,计算中用起来会超过32/64位字长。现在天文计算中一般会选择2000年1月1日为零点,之前有用1900年和1950年的。% @ T4 j5 ^6 m0 {4 ], E7 a
% \+ ~2 m- o; e- N$ m8 P# ]
从儒略日计算星期几,(JDN+1) mod 7 就好了。
6 ?( Y7 d( ?5 d* C" N2 t" d. {+ ] i! l4 \0 Z6 _4 V7 k/ \( N
这个公式是怎么来的呢? 1582年,教皇格里高利十三(XIII)发现,那一年的春分是3月11日,和儒略历里规定的日期3月21日差了十天。原因嘛,就是回归年的长度是365.2422,儒略历用的365.25。格十三用上了全部的指头,哦,应该是找了很多XX家之后,下令当年10月4日的后一天是10月15日,同时规定在原先四年一闰的基础上,100的整数倍年不是闰年,但400的整数倍年又是闰年。新的历法改名为格里高利历。
! ^/ r3 y5 ?; G4 w; T4 j
' R; D8 I5 Y7 ], p+ t0 K1 {为了计算转换儒略历和格里高利历,一个法国的教会学者Joseph Justus Scaliger给出了这个公式。“儒略日”中的儒略,是他老爸的名字。' n9 p7 O+ P3 i" S7 m2 ?
( j8 }1 O1 {! y& Q哦,原来的文献中用的是儒略历日期,要算儒略日是这样的:8 Q4 Q% c5 ^" v
- c1 K _8 u, C% T & f" K" a4 {9 Z( S& y; e8 C
' y$ y1 U1 Y# ]& x- L& \; H# Z) k从儒略日转格里高利历,也有一组公式,这里有:
( ~: X" S" v1 V0 o Z; d: W& P: N0 }0 d0 r _$ V+ n5 @
其实这些偏差,在儒略历启用之前是有人知道的。但是,始皇三十五年的某一天,一个罗马士兵在西西里岛上,拔出刀来,朝一个老人身上刺下去。这一刺,西方的科技文明停滞了一千多年。来自群组: 软件人家 |
评分
-
查看全部评分
|