现在的位置: 首页 > 综合 > 正文

MJD日期码转换UTC时间

2012年12月02日 ⁄ 综合 ⁄ 共 1732字 ⁄ 字号 评论关闭
最近在公司实习过程中解析TS流EIT时看到标准文档EN-300468文档里面说到MJD,不明白,所以上网整理一些,记录如下:
所使用的符号:
MJD: 修正的儒略日期,指由公元前4713年1月1日,协调世界时中午12时开始所经过的天数,多为天文学家采用,用以作为天文学的单一
历法,把不同
历法的年表统一起来。儒略日是一种不用年月的长期纪日法,简写为JD。是由法国纪年学家史迦利日(Joseph
Justus Scliger 1540年-1609年)在1583年所创,这名称是为了纪念他的父亲——
意大利学者Julius
Caesar Scaliger(1484 年-1558年)。
以儒略日计日是为方便计算年代相隔久远或不同历法的两事件所间隔的日数。
UTC:世界协调时,又称世界统一时间,世界标准时间,国际协调时间,简称UTC。它从英文“Coordinated Universal Time”/法文“Temps
Universel Cordonné”而来。
这套时间系统被应用于许多互联网和万维网的标准中,例如,网络时间协议就是协调世界时在互联网中使用的一
种方式。在军事中,协调世界时区会使用“Z”来表示。又由于Z在无线电联络中使用“Zulu”作代称,协调世界时也会被称为"Zulu time"。
中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。
Y: 从1900年开始(例如:对于2003年,Y=103)
M: 从1到12月
D: 从1到31日
WY: 从1900 年算起的星期数
WN: 根据ISO 8601 规定的星期数
WD: 从星期1到星期日(7)
K,L,M′,W,Y′: 临时变量
Mod 7: 模7,被7除之后的余数(0至6)
a) 如何从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)
b) 如何根据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)
c) 如何根据MJD计算WD,见式(B7)
WD = [(MJD+2)Mod 7]+1…………………………………………………………(B7)
mod为取余运算。
d) 如何根据WY,WN,WD计算MJD,见式(B8)
MJD = 15012+WD+7*{WN+int[(WY*1461/28)+0.41]}………………………….(B8)
e) 如何根据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日。
实例:例如如下TS文件中的EIT的start_time的40bit中包含以UTC和MJD形式表示的当前时间和日期(见EN文档附录C)。此字段前16位表示MJD日期码,其余24位按4位BCD编码,表示6个数字。经过上述公式计算可以得到Y(year)=2009。同理可计算月日。

抱歉!评论已关闭.