TA的每日心情 | 开心 昨天 00:00 |
|---|
签到天数: 3062 天 [LV.Master]无
|
本帖最后由 heinsect 于 2015-2-1 18:13 编辑
! [: C/ @7 z, i) _, e, ^ u+ F: W# O/ P5 D+ c& w
程序员计算日期是用儒略日的。
6 P( m3 m* U$ ~* S6 V" k& v1 e% v x; w* C' C
儒略日中的儒略和儒略历中的儒略的关系嘛,只是因为儒略日的发明人的爷爷葱白凯撒,给儿子用了大帝的名字。刚好儒略历也用了大帝的名字。& f' i2 c$ A# U7 R! N4 w- _
/ J% M, B6 S7 Y# }; {) i单用日期的话,儒略日是从某天开始的一个日的整数。两个儒略日的差值就是相差的天数。这样想计算两个日期间的差值,计算星期几就很简单了。至于那个开始日期,儒略日的零点,用起来的时候谁也不关心,我就不讲了。6 W0 m: k9 {$ R& u7 H8 c/ {$ i' ~
! }" l/ {. n+ q Z2 h从格里高利历日期算儒略日(JDN)的公式是这个样子的:
9 e4 ^1 C* L- D( M. j; Z" E- J' C. [& R9 Y
先要改一下年月:6 h) H$ Q. Z# h/ T* _# p. t: f
+ j0 T2 F& M6 x5 e, }! ?2 Z( B8 ~& ]
$ w* _$ w4 T8 ?( v上面这组公式的结果呢,差不多是这个意思:) L% R0 r" u8 x% q
三月 m = 0, y=y% @8 G0 g0 Q; q5 ], Q
...+ F! F5 I$ A' M: ~3 I* ^
十二月 m=9, y=y: e/ i" z6 Z0 W1 t5 ]; g- W3 ]1 B
一月 m = 10, y=y-1
2 a a3 ~7 ]. c4 r/ g二月 m = 11, y=y-1
' f4 k! D3 T7 b" B" n6 F# A9 x. c9 P% F: u7 X
那个4800,是个计算零点,大概在公元前4801年,是和前面所说的那个零点相关的。! \4 q! z( F' y) S
然后计算儒略日的公式长是这个样子的:" J, |' u* n% C' ] L9 r" \) K
4 {6 k0 h! Y; l. C' x
![]()
- g/ ]# ^1 X* G4 U
1 _$ r5 w6 w! i& C0 P这个公式中最巧的部分是 floor((153m+2)/5), 做出的效果嘛,看这个表:
+ ~6 L" N8 s2 RMar–Jul:31 30 31 30 31Aug–Dec:31 30 31 30 31Jan–Feb:31 282 |" V4 _1 B0 C/ z0 ^) j( j* q
最后面的那个系数,是相对于原点的修正值。原公式算出来的值一般太大,计算中用起来会超过32/64位字长。现在天文计算中一般会选择2000年1月1日为零点,之前有用1900年和1950年的。: I% V/ a! _! V
2 p* J' X$ k: d1 P) L' S7 [* Y从儒略日计算星期几,(JDN+1) mod 7 就好了。" o$ }% y9 t* O! w. z$ Q+ X6 K
# p' {) A. S3 r5 Y5 ~$ h6 F
这个公式是怎么来的呢? 1582年,教皇格里高利十三(XIII)发现,那一年的春分是3月11日,和儒略历里规定的日期3月21日差了十天。原因嘛,就是回归年的长度是365.2422,儒略历用的365.25。格十三用上了全部的指头,哦,应该是找了很多XX家之后,下令当年10月4日的后一天是10月15日,同时规定在原先四年一闰的基础上,100的整数倍年不是闰年,但400的整数倍年又是闰年。新的历法改名为格里高利历。8 z# v2 ~+ n, c5 p$ O8 z, O# r
" [* W$ v. ~# v Q3 p为了计算转换儒略历和格里高利历,一个法国的教会学者Joseph Justus Scaliger给出了这个公式。“儒略日”中的儒略,是他老爸的名字。
& J" v2 j% b' s
9 l, w8 \2 g* C哦,原来的文献中用的是儒略历日期,要算儒略日是这样的:
; i/ Q- _" d+ l; H+ V* A% g/ ~# _" p! |/ j5 k: V( a' P" b: W
1 v [6 v( i8 J- w# C
# m, n3 d5 T7 S# U' H# J" {从儒略日转格里高利历,也有一组公式,这里有:
) y3 q3 B& ^1 c: H- N. F, n( k, |0 f: B& j* p
其实这些偏差,在儒略历启用之前是有人知道的。但是,始皇三十五年的某一天,一个罗马士兵在西西里岛上,拔出刀来,朝一个老人身上刺下去。这一刺,西方的科技文明停滞了一千多年。来自群组: 软件人家 |
评分
-
查看全部评分
|