儒略日以及简化儒略日
儒略日(Julian Day, JD)和简化儒略日(Modified Julian Day, MJD)用于精确记录时间和日期的系统,它们在天文学中用的比较多,这种记录方式最大的优点是提供了一种统一的连续日时间表示方式,可以跨越不同的历法,方便进行天文观测数据的时间管理和计算。
比如,如果我问你2010年1月1日到2010年6月1日,一共过了多少天,是不是需要计算一会,还需要看看每个月多少天,但是如果你知道2010年1月1日的MJD为55197,2010年6月1日的MJD是55348,是不是可以直接知道间隔151天。
虽然我用的是整数,不过MJD和JD在定义里面是浮点数,也就是包含小数部分,比如过了1个小时,小数部分就需要增加1/24.
下面聊聊这两个日子的具体含义。
儒略日(Julian Day, JD)
儒略日是从公元前4713年1月1日12:00开始的连续日数计数。这样的设计让天文学家能够很容易地比较不同日期之间的时间间隔,无论这些日期所属的历法如何。
简化儒略日(Modified Julian Day, MJD)
简化儒略日是对儒略日的一个简化和调整,起始点为1858年11月17日00:00。MJD主要还是为了减少数字长度,因为公元前确实距离我们有点遥远,因为对于2010年1月1日,其对应的JD为2455197.5,太长了,所以MJD的值就是通过将JD的值中减去2400000.5即可得到。
JD和MJD的关系
MJD相对于JD而言,有以下改进或者优点:
- 日期天数的计算从午夜时分起算,而不是JD的正午。
- 在2132年8月之前,MJD只需要5位数字来表示日期就够了,而不需要JD全部的7位数字,更容易记录、存储和计算
所以JD和MJD之间的关系可以通过一个简单的转换公式来表示:
(1)𝐽𝐷=𝑀𝐽𝐷+2400000.5
即:MJD是在JD的基础上减去了2400000.5得到的。由于MJD的起点在JD时间尺度上相对较晚,所以这个偏移量使得MJD值能够保持在一个较为合理的范围内,便于现代计算和记录。
###
C语言实现计算儒略日和简化儒略日
以下是一个C语言程序,用于计算给定公历日期(年、月、日)的儒略日和简化儒略日。此程序基于Gregorian历法(格里历)进行计算。可以直接通过gcc编译使用。
#include <stdio.h>
// Calculate Julian Daydouble calculate_julian_day(int year, int month, int day){ if (month <= 2) { year--; month += 12; } int A = year / 100; int B = 2 - A + (A / 4);
double JD = (double)(365.25 * (year + 4716)) + (int)(30.6001 * (month + 1)) + day + B - 1524.5; return JD;}
// Calculate Modified Julian Daydouble calculate_modified_julian_day(double JD){ return JD - 2400000.5;}
int main(){ int year, month, day; printf("Please enter year, month, and day [For example : 2010,01,01]: "); scanf("%d,%d,%d", &year, &month, &day);
double jd = calculate_julian_day(year, month, day); double mjd = calculate_modified_julian_day(mjd);
printf("Julian Day: %.2f\n", jd); printf("Modified Julian Day: %.2f\n", mjd);
return 0;}
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/416014.html