流云の剑舞秋风

吾生也有涯 而知也无涯

博客园 首页 新随笔 联系 订阅 管理

计算星期可以用蔡勒(Zeller)公式(只适合于1582年10月15日之后的情形):

     w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

 公式中的符号含义如下:
     c:世纪(年的高两位数);
     y:年(年的低两位数);
     m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月
        来计算,比如2005年1月1日要看作2004年的13月1日来计算);
     d:日;
     []代表取整,即只要整数部分。
     w:星期;w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,
        5-星期五,6-星期六

 以2005年2月14日为例:c=20,y=4,m=14,d=14
     w = 4 + [4/4] + [20/4] - 2*20 + [26*(14+1)/10] + 14 - 1
       = 4 + 1     + 5      - 40   + 39             + 14 - 1
       = 22 (除以7余1)
 所以2005年2月14日是星期一。
蔡勒(Zeller)公式之所以只适合于1582年10月15日之后的情形,原因是:罗马教皇格里高利十三世在1582年组织了一批天文学家,根据哥白尼日心说计算出来的数据,对儒略历作了修改。将1582年10月5日到14日之间的10天宣布撤销,继10月4日之后为10月15日。
后来人们将这一新的历法称为“格里高利历”,也就是今天世界上所通用的历法,简称格里历或公历。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最常见的公式

W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D

Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。

  最好用的是蔡勒公式:

W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1

C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和
14月来算,这时C和y均按上一年取值。

  两个公式中的[...]均指只取计算结果的整数部分。算出来的W除以7,余数是几就
是星期几。如果余数是0,则为星期日。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
怎样在儒略历和公历之间进行转换

文/葛民勤


  前面两篇文章,分别介绍了公历日期到星期和年日干支的转换公式。但是这只对于
1582年10月15日以后的日期是有效的,如果用之前的日期来算,得出的结果往往和实际
不一致。

  这是因为公历是从1582年10月15日才开始颁行的,之前的纪年、纪日都是儒略历的
纪年、纪日。在历史上,罗马历法一共有三次重大变革。首先是公元前46年(罗马纪元
708年),罗马执政官儒略·恺撒(Julius Caesar)下令从次年(公元前45年)起行用新
历法。当时罗马人一直用一种很不成熟的阴阳历,为了实现这种旧历和新历之间的平稳
转换,这一年多加了两个月,竟长达445天,史称“乱年”(拉丁文annus confusionus,
英文the year of confusion)。和这种旧历不同,新历是纯粹的阳历,规定每四年一
闰,单月31天,双月(除二月外)30天,平年的二月29天,闰年加一天,即也是30天。
因为新历法的岁首比旧历提前了两个月(即以旧历11月1日为新历元旦),但是月份名称
仍然使用旧历的名称,所以现在公历9-12月的英文月份名分别是September, October,
November, December,而sept-, octo-, nov-和dec-本来是拉丁文里表示“七、八、九、
十”的词根。

  但是,在这种新历颁布之后,置闰一度发生失误。颁布历书的官员错误地把恺撒的
“每隔三年一闰”理解为“每三年一闰”,这就促成了公元前9年,罗马皇帝奥古斯都
(Octovian Augustus)下令进行罗马历法的第二次重大变革。这时候,已经多闰了三次,
如下:

应闰之年 前45 前41 前37 前33 前29 前25 前21 前17 前13 前9  前5
     前1  公元4

实闰之年 前45 前42 前39 前36 前33 前30 前27 前24 前21 前18 前15
     前12 前9

因此,为了消除这个失误,奥古斯都规定,公元前9年之后的三个应闰之年,即公元前5
年、前1年和公元4年,都改为平年,这件事史称“罗马失闰”。同时,因为他曾在八月
取得过重大的军事胜利(一说是因为他生于八月),他又决定从次年(公元前8年)起改
八月为31天,同是调整以后各月的天数,原为大月31天的九月、十一月改为小月30天,
原为小月30天的十月、十二月改为大月31天,二月则再减去一天,平年28天,闰年29天。
儒略历至此定型,以后一直沿用了将近一千六百年。

  但是,儒略历的一回归年长度为365.25天,比实际的365.2422天多11分14秒,积累
下来,128年就差一天,400年就差三天多。到将近一千六百年后的公元1582年,已经差
了十天,以致当年的春分日竟从3月21日提前到3月11日。鉴于此,当时的教皇格里高利
十三世(Pope Gregory XIII)再次改革历法,下令以当年10月4日的第二天为10月15日,
但星期保持连续。同时,为了避免以后再发生这种误差,改进了置闰规则,即年份能被
4整除的是闰年,但对于末尾是00的年份,必须被400整除才不是闰年。这样一来,新历
法一回归年的长度变为365.2425天,和实际值已经很接近,每三千多年才会差一天。这
种新历法就是现在我们仍在使用的公历,也称格里高利历。

  由于公历颁布得比较晚,距今不过四百多年,之前长达近一千六百年都是用儒略
历。为了方便起见,历史学界所使用的历表在1582年10月15日之后使用公历纪日,之前
一律使用儒略历纪日。这样一来,除了公元前8年以前的日期需要倒推确定外,以后的
史料中的日期都可以直接拿来用了。其他各国的古历,也都这样转化为儒略历或公历,
以求国际上的统一。这样的纪日法,总的来说也可以统称为公历纪日。

  了解了这段历法改革的历史,我们也就可以给出儒略历和公历相互转换的公式了。
因为儒略历和公历每四百年差3天,既然在儒略历1501年3月1日-1582年10月4日这一段时
间内,两历的日期总共差10天,倒推回去,在儒略历200年3月1日-300年2月29日这一段
时间内,两历的日期是相同的。再往前,儒略历的日期反而比公历要靠后了。这样就有:

Δd = C - [(C-1)/4] - 3.                                                 (1)

Δd是公历日期在儒略历日期之后的天数,C在大部分情况下是世纪数,[...]表示只取整
数部分。对于末尾为00的年份,在3月1日和3月1日以后,C要加1,即按下个世纪算;注
意,假如这段Δd跨越了2月末,2月的实际长度按转换之后的历法计算。也就是说,对于
末尾为00的年份,如果是儒略历转换为公历,2月按逢四百年29天、平时28天算;如果是
公历转换为儒略历,2月一律按29天算。

  比如,儒略历公元1500年2月26日,因为年份末尾是00,2月26日在3月1日之前,所
以C=15,于是有:

Δd = 15 - [(15-1)/4] - 3 = 9,

即公历日期在儒略历日期之后9天。因为这9天跨越了二月末,2月的实际长度按转换后的
公历算,为28天,所以这一天的公历日期是700年3月7日。反过来,如果要问公历的1500
年3月7日对应的儒略历日期是什么,因为3月7日在3月1日之后,C=16,这时

Δd = 16 - [(16-1)/4] - 3 = 10.

这9天同样跨越了二月末,2月的实际长度按转换后的儒略历算,为29天,这样就得到相应
的儒略历日期是1500年2月26日。

  公式(1)提供了对儒略历日期和公历日期的间隔日数的计算,借此就可以对两历日期
进行换算。但在计算儒略历日期的星期和日干支的时候,先转换成公历再计算还是显得麻
烦,为此,我们可以专门推导适用于儒略历日期的计算星期和日干支的公式,如下:

W = (5-C) + y + [y/4] + [13 * (M+1) / 5] + d - 1;                         (2)

g = (5C-2) + [C/4] + 5y + [y/4] + [3 * (M+1) / 5] + d - 3;                (3)

z = (9C-2) + [C/4] + 5y + [y/4] + [3 * (M+1) / 5] + d + 7 + i(奇数月i=0,偶数月i=6)                                                                      (4)

z = g + 4C + 10 + i(奇数月i=0,偶数月i=6)                                (5)

和相应的适用于公历日期的计算星期和日干支的公式相比,区别仅在于和世纪数减一有关
的项不同(这里为了更好地对比,没有把常数项全部合并),其他各项都是一样的,而公
式(5)则对公历日期和儒略历日期都适用。 

posted on 2005-05-12 10:07  流云  阅读(3887)  评论(1)    收藏  举报