时间转换 MJDUTC

2023-09-25 14 0

  • UTC(Universal Time, Co-ordinated) 世界协调时

  • MJD(Modified Julian Date) 修正的儒略日期

  • 所使用的符号:

  1. MJD: 修正的儒略日期
  2. UTC: 世界协调时
  3. Y: 从1900年开始(例如:对于2003年,Y=103)
  4. M: 从1到12月
  5. D: 从1到31日
  6. WY: 从1900 年算起的星期数
  7. WN: 根据ISO 8601 规定的星期数
  8. WD: 从星期1到星期日(7)
  9. K,L,M′,W,Y′: 临时变量
  10. ×: 乘法
  11. int: 取整,忽略了余数
  12. Mod 7: 模7,被7除之后的余数(0至6)
如何从MJD中计算Y,M,D,见式(B1)、式(B2)、式(B3)、式(B4)、式(B5)。

Y′ = int[(MJD-15078.2)/365.25………………………………………………(B1)
  M′ = int{[MJD-14956.1-int(Y′′365.25)]/30.6001}……………………….(B2)
  D = MJD-14956-int(Y′′365.25)-int(M′′30.6001)……………………….(B3)
  如果M′ == 14或M′ == 15,那么K = 1;否则K = 0
  Y = Y′+K…………………………………………………………………………….(B4)
  M = M′-1-K′12………………………………………………………………………(B5)

如何根据Y,M,D计算MJD,见式(B6)

如果M == 1或者M == 2那么L = 1;否则L = 0
  MJD = 14956+D+int[(Y-L)′365.25]+int[(M+1+L′12)′30.6001]…………(B6)

如何根据MJD计算WD,见式(B7)

WD = [(MJD+2)Mod 7]+1…………………………………………………………(B7)

如何根据WY,WN,WD计算MJD,见式(B8)

MJD = 15012+WD+7′{WN+int[(WY′1461/28)+0.41]}………………………….(B8)

如何根据MJD计算WY,WN,见式(B9)、式(B10)、式(B11)

W = int[(MJD/7)-2144.64]…………………………………………………….(B9)
WY = int[(W′28/1461)-0.0079]………………………………………………(B10)
WN = W-int[(WY′1461/28)+0.41]…………………………………………….(B11)
例子: MJD = 45 218 W = 4 315
Y =(19)82 WY=(19)82
M = 9(9月) WN = 36
D = 6 WD = 1(1月)
注:以上公式适用于1900年3月1日至2100年2月28日。
注:UTC + 时区差 = 本地时间

/**********************************************************
*mytime.c ** MJD:修正的儒略日期 ** UTC:通用时间坐标 ** Y:从1900年开始(例如:对于2003年,Y=103) * * M:从1到12月 * * D:从1到31日 ** WY:从1900年算起的星期数 ** WN:根据ISO 8601 规定的星期数 * * WD:从星期1到星期日(7) * *********************************************************/ #include"mytime.h"int calmjd(int y,int m,int d) 
{int l; l=0; if(m==1||m==2) l=1; return(14956+d+(int)(((float)y-(float)l)*365.25)+(int)(((float)m+1+l*12)*30.6001)); 
} int calwd(int mjd)
{ return((int)((mjd+2)%7)+1);
} int calwy(int mjd) 
{ int w; w=(int)(((((float)mjd)/7)-2144.64)); return((int)(((float)w*28/1461)-0.0079)); 
}int calwn(int mjd) 
{ int w,wy; w=(int)(((((float)mjd)/7)-2144.64)); wy=(int)(((float)w*28/1461)-0.0079); return(w-(int)(((float)wy*1461/28)+0.41)); 
}int ocalmjd(int wy,int wn,int wd) 
{ return(15012+wd+7*((float)wn+(int)(((float)wy*1461/28)+0.41))); 
}int mjdtod(int mjd)
{ int y1,m1; y1=(int)(((float)mjd-15078.2)/365.25); m1=(int)(((float)mjd-14956.1-(int)((float)y1*365.25))/30.6001); return(mjd-14956-(int)((float)y1*365.25)-(int)((float)m1*30.6001)); 
}int mjdtom(int mjd) 
{ int y1,m1,k; y1=(int)(((float)mjd-15078.2)/365.25); m1=(int)(((float)mjd-14956.1-(int)((float)y1*365.25))/30.6001); k=0; if((y1==14)||(y1==15)) k=1; return(m1-1-k*12); 
}int mjdtoy(int mjd) 
{ int y1,m1,k; y1=(int)(((float)mjd-15078.2)/365.25); m1=(int)(((float)mjd-14956.1-(int)((float)y1*365.25))/30.6001);k=0; if((y1==14)||(y1==15)) k=1; return(y1+k); 
}
代码编程
赞赏

相关文章

写给学生看的系统分析与验证笔记(十一)——Generalized NBA(GNBA)
1016 Phone Bills (25 分)
华南农业大学Linux课程综合实验——用Java、PHP、Go、Nodejs语言,实现从MySQL读取内容并显示在浏览器上
拓扑排序(最长路径)
高校计算机基础教改,关于高校计算机基础教学改革的几点思考
#1175 : 拓扑排序·二