TA的每日心情 | 开心 10 小时前 |
|---|
签到天数: 3040 天 [LV.Master]无
|
本帖最后由 heinsect 于 2015-2-1 18:13 编辑 7 T8 A8 b9 X7 O+ o
8 P2 E- v, e, F# G+ J: R( Y
程序员计算日期是用儒略日的。
4 O% J) Q' B9 N$ l* I
/ F& Z7 m5 Y5 c5 U2 p儒略日中的儒略和儒略历中的儒略的关系嘛,只是因为儒略日的发明人的爷爷葱白凯撒,给儿子用了大帝的名字。刚好儒略历也用了大帝的名字。9 `) y6 |/ M5 w G1 W* O% Z: k% a
: {& Z$ U$ @- |8 w$ i% R- P: D
单用日期的话,儒略日是从某天开始的一个日的整数。两个儒略日的差值就是相差的天数。这样想计算两个日期间的差值,计算星期几就很简单了。至于那个开始日期,儒略日的零点,用起来的时候谁也不关心,我就不讲了。
4 m* d2 o' Q. K( c# W# L- K/ J( J- x: O1 P0 S- |3 t$ G* a
从格里高利历日期算儒略日(JDN)的公式是这个样子的:. {( z! p+ y1 w% I- [1 P& G% H% Z
) N( t( o1 p1 K
先要改一下年月:& k, M7 m) w2 j( r- C- H
![]()
* X# E$ V8 r/ ^; P9 N Z3 `
' ~/ Y! x3 P# `& ^3 Q" g上面这组公式的结果呢,差不多是这个意思:
. ~$ i- X2 v+ U7 k' _三月 m = 0, y=y- r& l( j" E/ y* @) G% \
...2 g h" p9 F: Q3 {) n5 `
十二月 m=9, y=y
. S' J7 y4 f# p) j: n1 Q+ Z一月 m = 10, y=y-1
0 ?) O7 _' ~' o9 D二月 m = 11, y=y-1; t# R" {, Z: {( C, k2 U4 ?) [
. l% w. i- R, P! V7 T% R
那个4800,是个计算零点,大概在公元前4801年,是和前面所说的那个零点相关的。
- C4 Q, b* D7 k5 q0 ^7 z然后计算儒略日的公式长是这个样子的:
" `6 u0 e! S8 E! X- K2 N
( L5 _% T1 b" J, d( B. _( @1 W 4 Z8 t R9 i5 e# z/ E
6 z; b+ g3 j/ W# Q" ^# l$ D这个公式中最巧的部分是 floor((153m+2)/5), 做出的效果嘛,看这个表:
+ G. o) c( Y6 GMar–Jul:31 30 31 30 31Aug–Dec:31 30 31 30 31Jan–Feb:31 28$ m2 U8 M ^/ g4 r& u* n) Z
最后面的那个系数,是相对于原点的修正值。原公式算出来的值一般太大,计算中用起来会超过32/64位字长。现在天文计算中一般会选择2000年1月1日为零点,之前有用1900年和1950年的。
\* f7 x: O9 k. p, U) t* ]$ Q3 x- s4 F( m6 h" c
从儒略日计算星期几,(JDN+1) mod 7 就好了。
: _& u* g2 B' I$ i1 T e* Q# i/ ?% L7 w+ _. K3 n
这个公式是怎么来的呢? 1582年,教皇格里高利十三(XIII)发现,那一年的春分是3月11日,和儒略历里规定的日期3月21日差了十天。原因嘛,就是回归年的长度是365.2422,儒略历用的365.25。格十三用上了全部的指头,哦,应该是找了很多XX家之后,下令当年10月4日的后一天是10月15日,同时规定在原先四年一闰的基础上,100的整数倍年不是闰年,但400的整数倍年又是闰年。新的历法改名为格里高利历。! z/ F7 L2 t/ C2 a
* _ x9 a7 t* a2 H) J" }' N为了计算转换儒略历和格里高利历,一个法国的教会学者Joseph Justus Scaliger给出了这个公式。“儒略日”中的儒略,是他老爸的名字。6 u8 w+ X( l7 l
& s3 m2 ~- W" c& h# `( x哦,原来的文献中用的是儒略历日期,要算儒略日是这样的:6 M; f5 {& O* y2 B% W% F
! o+ Y U3 Y* y! k: \( ]. a( G; _
![]()
$ x$ N! K$ ~) M- N: u5 H' L
$ d2 `9 m1 a: i0 o- B5 m K$ k从儒略日转格里高利历,也有一组公式,这里有:& K m4 L6 B0 F6 N6 \4 ^6 G0 {5 n
5 V- Z e+ [. N0 B
其实这些偏差,在儒略历启用之前是有人知道的。但是,始皇三十五年的某一天,一个罗马士兵在西西里岛上,拔出刀来,朝一个老人身上刺下去。这一刺,西方的科技文明停滞了一千多年。来自群组: 软件人家 |
评分
-
查看全部评分
|