TA的每日心情 | 开心 13 小时前 |
|---|
签到天数: 3060 天 [LV.Master]无
|
本帖最后由 heinsect 于 2015-2-1 18:13 编辑 / n/ ]0 ?+ N5 m& m! {
# i+ S: S" Z' D4 Y# P
程序员计算日期是用儒略日的。
7 ~$ V$ e# Z3 q) G, O6 T M6 \/ i, r
儒略日中的儒略和儒略历中的儒略的关系嘛,只是因为儒略日的发明人的爷爷葱白凯撒,给儿子用了大帝的名字。刚好儒略历也用了大帝的名字。
9 o9 ~" N, h& i- B* I5 v
+ N( d% Q2 D& N4 H0 [: R% J! j; c单用日期的话,儒略日是从某天开始的一个日的整数。两个儒略日的差值就是相差的天数。这样想计算两个日期间的差值,计算星期几就很简单了。至于那个开始日期,儒略日的零点,用起来的时候谁也不关心,我就不讲了。: d0 e4 f6 C9 m& E7 ^# [9 C- R3 @
p5 b5 w5 e O' b9 E从格里高利历日期算儒略日(JDN)的公式是这个样子的:
6 }" n$ X3 W- o0 O/ |- Y0 U
( l7 x2 I" [9 _先要改一下年月:
2 k( [; K: C6 B0 |5 l# w2 M![]()
1 r2 K9 l5 I3 O3 t/ @7 m1 J3 P/ ^9 }" R& G Z2 w
上面这组公式的结果呢,差不多是这个意思:
# B1 X% V* s0 B) ?$ J1 ~三月 m = 0, y=y
! c& p! b+ |7 F/ l! V5 [..., r% P7 D- n1 H9 Y: Z- W
十二月 m=9, y=y
1 M. @: E8 I- }0 _" x' _$ B0 t一月 m = 10, y=y-1+ F. c9 L; m9 o& K; `9 m3 X% m% l
二月 m = 11, y=y-1
5 u1 c& K; O! T; F( Y9 j: E
( d. V8 f3 m) y& |, j% z那个4800,是个计算零点,大概在公元前4801年,是和前面所说的那个零点相关的。
y/ y3 C: S, F+ X- k r/ }然后计算儒略日的公式长是这个样子的:
6 d/ ^/ }, x2 e* R. A) Y9 Q( x+ B- b8 H$ K. u, e( @( C
![]()
' m1 O& n; G% a* {8 ?7 g* z2 V, B0 U2 @
这个公式中最巧的部分是 floor((153m+2)/5), 做出的效果嘛,看这个表:2 e3 I7 b3 j5 V; [: Z. A
Mar–Jul:31 30 31 30 31Aug–Dec:31 30 31 30 31Jan–Feb:31 28
* B4 [2 O7 f: F最后面的那个系数,是相对于原点的修正值。原公式算出来的值一般太大,计算中用起来会超过32/64位字长。现在天文计算中一般会选择2000年1月1日为零点,之前有用1900年和1950年的。8 ]2 K9 O0 n( ^
+ B6 w6 p s d7 q
从儒略日计算星期几,(JDN+1) mod 7 就好了。4 `* J% P, C9 ?) W$ h/ V5 ^
% n1 D9 |) I* Q. j$ ^- M& p# x6 F
这个公式是怎么来的呢? 1582年,教皇格里高利十三(XIII)发现,那一年的春分是3月11日,和儒略历里规定的日期3月21日差了十天。原因嘛,就是回归年的长度是365.2422,儒略历用的365.25。格十三用上了全部的指头,哦,应该是找了很多XX家之后,下令当年10月4日的后一天是10月15日,同时规定在原先四年一闰的基础上,100的整数倍年不是闰年,但400的整数倍年又是闰年。新的历法改名为格里高利历。
3 F; A, D. N3 X$ H/ n: Q! o( v1 L/ H5 y/ y% _
为了计算转换儒略历和格里高利历,一个法国的教会学者Joseph Justus Scaliger给出了这个公式。“儒略日”中的儒略,是他老爸的名字。4 O2 g. I# k Z- H. l, D8 V
: @% l t7 ]- V7 ~8 ?3 d2 V
哦,原来的文献中用的是儒略历日期,要算儒略日是这样的:# S& V; a9 k/ | x8 w- Q; Y
9 @8 z( h# D. P* m7 t
# r( h$ A) \- k$ W4 G3 ~6 M. {
( S) X- ^/ [" O1 w9 f3 H: W从儒略日转格里高利历,也有一组公式,这里有:
* C9 ~* k2 [1 j' v, Y6 C9 i8 u% _9 x, o
其实这些偏差,在儒略历启用之前是有人知道的。但是,始皇三十五年的某一天,一个罗马士兵在西西里岛上,拔出刀来,朝一个老人身上刺下去。这一刺,西方的科技文明停滞了一千多年。来自群组: 软件人家 |
评分
-
查看全部评分
|