这个计算器能做什么
本工具可在儒略历(公元前 45 年颁行,凡能被 4 整除的年份均为闰年)与公历(即 1582 年改革后的格里历,每 400 年减去 3 个闰日)之间换算日期。你只需按其中一种历法输入日期,工具就会给出另一种历法下对应的日期。这是一种纯天文学/西方历法的换算方法,在世界各地的计算结果完全一致,与所在地区无关。
使用方法
先选择源历法(即你输入的日期所采用的历法体系),结果将以另一种历法呈现。接着选择纪年(公元 AD/CE 或公元前 BC/BCE),再依次填入年、月、日。计算器会输出换算后的纪年、年、月、日,并附上作为中间值的儒略日数(JDN)以及日差(即在该日期下公历比儒略历领先多少天)。
公式详解
最简洁且精确的换算方式是借助 JDN——这是一种与任何历法都无关的整数日计数。第一步,用标准整数公式(儒略历版本与公历版本各一)把源历法的(年、月、日)转换为 JDN。公历版本为:
$$\text{JDN} = D + \left\lfloor\frac{153m+2}{5}\right\rfloor + 365y + \left\lfloor\frac{y}{4}\right\rfloor - \left\lfloor\frac{y}{100}\right\rfloor + \left\lfloor\frac{y}{400}\right\rfloor - 32045$$
儒略历版本为:
$$\text{JDN} = D + \left\lfloor\frac{153m+2}{5}\right\rfloor + 365y + \left\lfloor\frac{y}{4}\right\rfloor - 32083$$
第二步,再把该 JDN 换算到另一种历法。所有除法都采用数学上的向下取整(floor)除法;公元前年份则使用天文纪年法:公元前 B 年对应天文年 1 - B(公元前 1 年 = 0,公元前 45 年 = -44),因此经过 0 年的往返换算依然精确无误。
实例演算
以公历公元 1582 年 6 月 15 日为例。取天文年 \(Y_{astro} = 1582\),按"公历转 JDN"公式得到 \(\text{JDN} = 2299039\)。再把该 JDN 换算回儒略历,结果为 1582 年 6 月 5 日。也就是说,公历 1582 年 6 月 15 日等同于儒略历 1582 年 6 月 5 日——当时公历比儒略历整整领先 10 天,这与 1582 年 10 月的历法改革相吻合(日差 \(\text{dayDifference} = +10\))。
常见问题
有没有"0 年"?没有。在纪年体系中,公元前 1 年之后紧接着就是公元 1 年。但在程序内部我们采用天文纪年法,将 0 年记为公元前 1 年,这样运算才能保持连续。
为什么叫"预推(proleptic)"?这类换算会把每种历法的规则套用到所有日期上,哪怕是在该历法历史上尚未存在的年代也照样适用。它并不反映各国在不同时间先后采用公历改革这一历史事实。
这个日差随时间如何变化?大致来说:公元 200 年前后约为 0 天,1582 年为 +10 天,1900—2099 年为 +13 天,2100 年起则为 +14 天。