JDCAL 使用文档

儒略日(Julian Day,JD)是在儒略周期内以天数计算时间的方法,主要在天文学等领域使用,是描述地球、天体等运动的时间衡量方式。儒略日的起点为儒略历的公元前 4713 年 1 月 1 日中午 12 点。由于儒略历的数字位数太多,在实际使用时多有不便,国际天文学联合会又定义了简化儒略日(MJD)。简化儒略日的起点是公历 1858 年 11 月 17 日 0 时。

在儒略日与日常使用的公历(格里高利历)之间转换是经常需要做的事情。本文介绍一个 Python 模块:jdcal,使用该模块可以避免重新发明轮子。

简介

jdcal 是由 Prasanth Nair 实现的一个 Python 模块,该模块提供了处理儒略日、儒略历和公历等日期转换的一系列常量和方法。该模块支持 Python 2 和 Python 3,基于 BSD 许可证开源,其代码托管在 Github 网站上。

安装与更新

jdcal 支持使用 pip 安装,在终端或命令提示符界面执行以下命令进行安装:

1
$ pip install jdcal

上面的命令将从 PyPI 仓库下载 jdcal 的程序包,并将其加入到你的程序库中。要更新 jdcal,可运行命令:

1
$ pip install --upgrade jdcal

模块内容

常量

模块中定义了两个常量:

  • MJD_0
    简化儒略日的起点。

  • MJD_JD2000
    天文学中常用的 JD2000.0(2000/1/1 12:00:00)历元对应的简化儒略日。

作为示例的交互式控制台代码:

1
2
3
4
5
>>> from jdcal import *
>>> MJD_0
2400000.5
>>> MJD_JD2000
51544.5

儒略日与公历

  • gcal2jd(year, month, day)
    将公历的年月日转换为儒略日,返回一个包含两个浮点数的元组。其中第一个数字为简化儒略日的起点,第二个数字为公历对应的简化儒略日(MJD)。因此,要得到公历对应的儒略日(JD),你需要将两个浮点数加起来。还需要注意的是:该函数的输出是按照输入日期的 0 时(不是 12 时)计算的。

  • jd2gcal(jd)
    将儒略日或简化儒略日转换为公历中的年月日,返回一个包含 4 个数字的元组。其中前三个为整数的年月日,最后的浮点数为不足一天的小数部分。该函数将两个输入参数的和作为儒略日使用。因此,若你输入的是简化儒略日,则另一个参数应为简化儒略日的起点;若你输入的是儒略日,保持另一个参数为零即可。

示例,使用 gcal2jd(year, month, day) 函数获得公历对应的简化儒略日,然后对输出的元组求和得到儒略日:

1
2
3
4
5
>>> from jdcal import *
>>> gcal2jd(2000, 1, 1)
(2400000.5, 51544.0)
>>> sum(gcal2jd(2000, 1, 1))
2451544.5

示例,使用 jd2gcal(jd) 函数获得儒略日或简化儒略历所对应的公历:

1
2
3
4
5
>>> from jdcal import *
>>> jd2gcal(0, 2451545)
(2000, 1, 1, 0.5)
>>> jd2gcal(MJD_0, 51544.5)
(2000, 1, 1, 0.5)

儒略日与儒略历

  • jcal2jd(year, month, day)
    将儒略历中的年月日转换为儒略日,返回一个包含两个浮点数的元组。其中第一个数字为简化儒略日的起点,第二个数字为儒略历对应的简化儒略日(MJD)。因此,要得到儒略历对应的儒略日(JD),你亦需要将两个浮点数加起来。另外,该函数的输出也是按照输入日期的 0 时(不是 12 时)计算的。

  • jd2jcal(jd)
    将儒略日转换为儒略历中的年月日,返回一个包含 4 个数字的元组。其中前三个为整数的年月日,最后的浮点数为不足一天的小数部分。与 jd2gcal(jd) 类似,该函数同样将两个输入参数的和作为儒略日使用。因此,若你输入的是简化儒略日,则另一个参数应为简化儒略日的起点;若你输入的是儒略日,保持另一个参数为零。

示例,使用 jcal2jd(year, month, day) 函数获得儒略历对应的简化儒略日,然后对输出的元组求和得到儒略日:

1
2
3
4
5
>>> from jdcal import *
>>> jcal2jd(1999, 12, 19)
(2400000.5, 51544.0)
>>> sum(jcal2jd(1999, 12, 19))
2451544.5

示例,使用 jd2jcal(jd) 函数获得儒略日或简化儒略历所对应的儒略历:

1
2
3
4
5
>>> from jdcal import *
>>> jd2jcal(0, 2451544.5)
(1999, 12, 19, 0.0)
>>> jd2jcal(MJD_0, 51544.0)
(1999, 12, 19, 0.0)

其他方法

  • is_leap(year)
    判断输入的年是否为格里高利历中的闰年。即对于非世纪年(不能被 100 整除),能被 4 整除;对于世纪年,能被 400 整除。

作为示例的交互式控制台代码:

1
2
3
4
5
>>> from jdcal import *
>>> is_leap(1900)
False
>>> is_leap(2000)
True

测试

如果你需要测试 jdcal,其测试代码放在 test_jdcal.py 中。你可以通过执行该脚本来测试位于相同目录下的 jdcal.py 程序:

1
$ python test_jdcal.py