空间大地测量时间系统
本文首先介绍常见的几种时间标示法,包括格里高利时、儒略日、GPS 时和年积日,并介绍各个时间系统的相互转换。相关的转换函数在 gpstime 开源软件库中提供。
时间标示法
从古至今,世界各国曾出现过多种历法,如罗马历、儒略日、格里高利以及我国的农历等,目前世界上广泛采用的历法是格里高利历。
格里高利时(通用时)
格里高利历也称公历,现被世界各国广泛采用。格里高利历是一个由 146097 天所组成的 400 年周期为基础,1年的平均长度为 365.2425 天。根据格里高利历1年被划分为12个月。其标示时间时采用年、月、日、时、分、秒的方法。这种计时反映季节变化,与日常生活密切相关,但非连续,不利于数学表达和科学计算。
儒略日
儒略日是一种不涉及年、月等概念的长期连续的记日法,在天文学、空间大地测量和卫星导航定位中经常使用。这种方法是由 Scaliger 于1583年提出的,为纪念他的父亲儒略而命名为儒略日。儒略日的起点订在公元前4713年(天文学上记为 -4712 年)1月1日格林威治时间平午(世界时12:00),即 JD 0 指定为 4713 B.C. 1月1日12:00 UT 到 4713 B.C. 1月2日12:00 UT 的24小时。每一天赋予了一个唯一的数字。
由于儒略日数字位数太多,国际天文学联合会于1973年采用简化儒略日(MJD),其定义为 MJD = JD – 2400000.5。MJD 相应的起点是1858年11月17日世界时 0 时。例如1979年10月1日零时儒略日数为 2,444,147.5。
GPS 时
GPS 系统内部所采用的时间系统是 GPS 时间,GPS 时以1980年1月6日子夜为起点,用周数(一个星期七天)和周内的秒数来表示。
年积日
所谓年积日就是指的是从每年的1月1日起开始累计的天数,计数从 1 开始(即每年1月1日的年积日为1),如2004年5月1日的年积日为 122。用他可以方便的求出一年内两个时刻 T1 和 T2 间的时间间隔。
各个时间系统的相互转换
各个时间系统都有严格的转换公式,其转换的主要思想是把通用时、GPS 时间、和年积日分别转换为儒略日,然后以儒略日为媒介,实现任意两个时间系统的相互转换。gpstime 是一个实现了各个时间系统相互转换的库,下面我们会以它为例进行讲解。
转换思想如下图所示:
通用时与儒略日间的相互转换
由通用时转换到儒略日
API 函数:
CommonTimeToJulianDay( pct, pjd )
转换公式:
$$
JD = INT[365.25y] + INT[30.6001(m+1)] + D + UT/24 + 1720981.5
$$
其中
- 如果 M≤2,则 y=Y-1,m=M+12;
- 如果 M>2,则 y=Y,m=M
- JD 为儒略日,Y 为年,M 为月,D 为日,UT 为世界时。
由儒略日转换到通用时
API 函数:
JulianDayToCommonTime( pjd, pct )
转换公式:
$$
a = INT[JD + 0.5]
$$
$$
b = a + 1537
$$
$$
c = INT[(b-122.1)/365.25]
$$
$$
d = INT[365.25.c]
$$
$$
e = INT[(b-d)/30.6001]
$$
日
$$
D = b-d-INT[20.6001e]+FRAC[JD+0.5]
$$
月
$$
M = e-1-12*INT[e/14]
$$
年
$$
Y = c-4715-INT[(7+M)/10]
$$
星期几,N=0 为星期一,N=1 为星期二,…
$$
N = mod{INT[JD+0.5],7}
$$
通用时与 GPS 时间间的相互转换
由通用时转换到 GPS 时间
API 函数:
CommonTimeToGPSTime( pct, pgt )
主要分两步进行:
- 第一步:计算 GPS 周
- 第二步:计算一周内的秒数
由 GPS 时间转换到通用时
API 函数:
GPSTimeToCommonTime( pgt, pct )
主要分两步进行:
- 第一步:由 GPS 时间转换到儒略日
- 第二步:由儒略日转换到通用时
儒略日与年积日之间的相互转换
由儒略日转换到年积日
API 函数:
JulianDayToDOY( pjd, pdoy )
主要分三步进行:
- 第一步:计算出通用时
- 第二步:计算出当年1月1日的儒略日
- 第三步:两个儒略日求差加 1,得出年积日
年积日转换到儒略日
API 函数:
DOYToJulianDay( pdoy, pjd )
主要分一下两步进行:
- 第一步:计算出当年1月1日的儒略日 JD1
- 第二步:年积日加 JD1 减 1 得儒略日
GPS 时与年积日间的相互转换
参照儒略日与年积日之间转换方法进行就可以得到结果。
GPS 时转换到年积日
API 函数:
GPSTimeToDOY ( pgt, pdoy )
年积日转换到 GPS 时
API 函数:
DOYToGPSTime (pdoy, pgt )