我想将纪元格式的给定时间转换为 MJD(修改后的儒略日)。但没有得到确切的 MJD 等价物。我认为缺少一些偏移值。
#include <stdio.h>
#include <time.h>
#include <memory.h>
int get_mjd (int Y, int M, int D)
{
int L = 0, MJD = 0;
if ((M == 1) || (M == 2))
L = 1;
MJD = 14956 + D + (int)((Y - L) * 365.25) +
(int)((M + 1 + L * 12) * 30.60001);
return MJD;
}
int main(){
time_t start;
int mjd;
struct tm start_tm;
start = 1442286867; // Tue, 15 Sep 2015 03:14:27 GMT
memcpy(&start_tm, localtime(&start),sizeof(struct tm));
printf("year:%d\tmonth: %d\tday: %d\n",start_tm.tm_year,start_tm.tm_mon,start_tm.tm_mday);
mjd = get_mjd(start_tm.tm_year,start_tm.tm_mon, start_tm.tm_mday);
printf("mjd: %d\n",mjd);
return 0;
}
输出: 年:115 月:8 日:15 mjd: 57249
预期的mjd应该是57280
请让我知道这里可能遗漏了什么。
最佳答案
如果您不需要将日期分解为公历年/月/日值,则有一种更简单的方法。
double mjd(time_t epoch_time)
{
return epoch_time / 86400.0 + 40587;
}
值 40587 是 MJD 纪元(1858-11-17)和 Unix 纪元(1970-01-01)之间的天数,86400 是一天中的秒数。
关于c - 纪元(以秒为单位)到 C 中的 MJD 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32577183/