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 | from jdcal import * |
儒略日与公历
gcal2jd(year, month, day)
将公历的年月日转换为儒略日,返回一个包含两个浮点数的元组。其中第一个数字为简化儒略日的起点,第二个数字为公历对应的简化儒略日(MJD)。因此,要得到公历对应的儒略日(JD),你需要将两个浮点数加起来。还需要注意的是:该函数的输出是按照输入日期的 0 时(不是 12 时)计算的。jd2gcal(jd)
将儒略日或简化儒略日转换为公历中的年月日,返回一个包含 4 个数字的元组。其中前三个为整数的年月日,最后的浮点数为不足一天的小数部分。该函数将两个输入参数的和作为儒略日使用。因此,若你输入的是简化儒略日,则另一个参数应为简化儒略日的起点;若你输入的是儒略日,保持另一个参数为零即可。
示例,使用 gcal2jd(year, month, day)
函数获得公历对应的简化儒略日,然后对输出的元组求和得到儒略日:
1 | from jdcal import * |
示例,使用 jd2gcal(jd)
函数获得儒略日或简化儒略历所对应的公历:
1 | from jdcal import * |
儒略日与儒略历
jcal2jd(year, month, day)
将儒略历中的年月日转换为儒略日,返回一个包含两个浮点数的元组。其中第一个数字为简化儒略日的起点,第二个数字为儒略历对应的简化儒略日(MJD)。因此,要得到儒略历对应的儒略日(JD),你亦需要将两个浮点数加起来。另外,该函数的输出也是按照输入日期的 0 时(不是 12 时)计算的。jd2jcal(jd)
将儒略日转换为儒略历中的年月日,返回一个包含 4 个数字的元组。其中前三个为整数的年月日,最后的浮点数为不足一天的小数部分。与jd2gcal(jd)
类似,该函数同样将两个输入参数的和作为儒略日使用。因此,若你输入的是简化儒略日,则另一个参数应为简化儒略日的起点;若你输入的是儒略日,保持另一个参数为零。
示例,使用 jcal2jd(year, month, day)
函数获得儒略历对应的简化儒略日,然后对输出的元组求和得到儒略日:
1 | from jdcal import * |
示例,使用 jd2jcal(jd)
函数获得儒略日或简化儒略历所对应的儒略历:
1 | from jdcal import * |
其他方法
- is_leap(year)
判断输入的年是否为格里高利历中的闰年。即对于非世纪年(不能被 100 整除),能被 4 整除;对于世纪年,能被 400 整除。
作为示例的交互式控制台代码:
1 | from jdcal import * |
测试
如果你需要测试 jdcal,其测试代码放在 test_jdcal.py 中。你可以通过执行该脚本来测试位于相同目录下的 jdcal.py 程序:
1 | $ python test_jdcal.py |