TA的每日心情 | 开心 16 小时前 |
|---|
签到天数: 3040 天 [LV.Master]无
|
本帖最后由 heinsect 于 2015-2-1 18:13 编辑
4 P# q9 |" T: `2 @! Y" b p4 F: U( k) N% b, A0 ~
程序员计算日期是用儒略日的。
% W b. Q) D0 h3 t( }; [' a& U4 ^
儒略日中的儒略和儒略历中的儒略的关系嘛,只是因为儒略日的发明人的爷爷葱白凯撒,给儿子用了大帝的名字。刚好儒略历也用了大帝的名字。- ?% z1 _& E) ~7 m r! M) Q- z
! D3 X% v. L' b- Q- i+ b, n1 @
单用日期的话,儒略日是从某天开始的一个日的整数。两个儒略日的差值就是相差的天数。这样想计算两个日期间的差值,计算星期几就很简单了。至于那个开始日期,儒略日的零点,用起来的时候谁也不关心,我就不讲了。7 k% V% g0 e" {+ W) _4 u
$ \- C7 H* `5 C$ y2 g% E从格里高利历日期算儒略日(JDN)的公式是这个样子的:
& K0 ~0 d% U" G r( w& ]. ~3 ]2 o" b1 \& y9 O5 B! ` d. J9 o
先要改一下年月:
; U/ A W1 }& s ^5 p+ r![]()
0 G9 H. u: b& S: ^- E8 k# m# w- ~2 m: w# @8 L" f" E# v
上面这组公式的结果呢,差不多是这个意思:! D. q& _5 K, ?0 M$ | w0 `- U( U
三月 m = 0, y=y: I' F. A$ C) B+ t) i
...
# @) E6 ^- T1 ~, L! v5 p十二月 m=9, y=y( x; h% Z3 e% k* J
一月 m = 10, y=y-1
4 q, G0 K( E2 B2 T) l: V$ E二月 m = 11, y=y-12 X# b. e# f: o- K6 {8 p
% D- @. T+ d |8 }& }6 s3 c2 T
那个4800,是个计算零点,大概在公元前4801年,是和前面所说的那个零点相关的。
! x8 K* P2 {, I) c3 d然后计算儒略日的公式长是这个样子的:" I8 A9 o* d3 i
" L3 g y) s( J1 e5 l2 D
3 _& o3 H# O6 k1 R
! @' l9 L6 _) U: D! Q; V: `
这个公式中最巧的部分是 floor((153m+2)/5), 做出的效果嘛,看这个表:) k& ?- I) R! P: m3 m6 k! B. E
Mar–Jul:31 30 31 30 31Aug–Dec:31 30 31 30 31Jan–Feb:31 285 q0 G5 d3 ^5 x- ^- V( a- Y1 L6 a" K3 r
最后面的那个系数,是相对于原点的修正值。原公式算出来的值一般太大,计算中用起来会超过32/64位字长。现在天文计算中一般会选择2000年1月1日为零点,之前有用1900年和1950年的。
! J1 Q: M8 S0 G9 ?( k
/ ?3 p+ ?9 e; I5 H* K# l从儒略日计算星期几,(JDN+1) mod 7 就好了。* @. F1 ]0 x: @+ O5 B' ~) f2 V
6 h/ }# N+ x/ r) Y这个公式是怎么来的呢? 1582年,教皇格里高利十三(XIII)发现,那一年的春分是3月11日,和儒略历里规定的日期3月21日差了十天。原因嘛,就是回归年的长度是365.2422,儒略历用的365.25。格十三用上了全部的指头,哦,应该是找了很多XX家之后,下令当年10月4日的后一天是10月15日,同时规定在原先四年一闰的基础上,100的整数倍年不是闰年,但400的整数倍年又是闰年。新的历法改名为格里高利历。$ l+ Y* h1 B: }; B' y
; Q" Y# h. C. C9 z
为了计算转换儒略历和格里高利历,一个法国的教会学者Joseph Justus Scaliger给出了这个公式。“儒略日”中的儒略,是他老爸的名字。
6 G( G- w4 N. @3 |
3 T9 t4 d- b. o$ r哦,原来的文献中用的是儒略历日期,要算儒略日是这样的:
3 s1 D4 d& @( Q+ b" \5 m" z0 l6 A7 P
![]()
7 I5 u! G5 k1 `# v& c4 x, l; e
- e0 S% O; y& g' ^ I9 A. W& s从儒略日转格里高利历,也有一组公式,这里有:
9 U' e3 o3 D0 p/ W# e9 F( Y7 e" v( d. `! D9 b- F _4 m# c) \" C3 k
其实这些偏差,在儒略历启用之前是有人知道的。但是,始皇三十五年的某一天,一个罗马士兵在西西里岛上,拔出刀来,朝一个老人身上刺下去。这一刺,西方的科技文明停滞了一千多年。来自群组: 软件人家 |
评分
-
查看全部评分
|