闲话儒略日和MJD

儒略日以及简化儒略日

儒略日(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而言,有以下改进或者优点:

  1. 日期天数的计算从午夜时分起算,而不是JD的正午。
  2. 在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

(0)
联系我们
联系我们
分享本页
返回顶部