世界时、UTC、GPS时、本地时间、闰秒

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

世界时、UTC、GPS时、本地时间、闰秒

(一)时间系统

世界时是基于地球自转的一种时间计量系统,反映了地球在空间的位置。

原子时是基于原子物理技术的一种更加均匀的时间系统,对于测量时间间隔非常重要。

由于两种时间尺度速率上的差异,一般来说1~2年会差1秒。

协调世界时(UTC , Universal Time Coordinated)是我们日常生活所用的时间,是一种折衷的时间尺度,它用原子时的速率,而在时刻上逼近世界时,所用方法就是“闰秒”,当协调世界时和世界时之差即将超过±0.9秒时,就对协调世界时作一整秒的调整。UTC在本质上还是一种原子时,因为它的秒长规定和原子时秒长相等,只是在时刻上,通过人工干预(闰秒),尽量靠近世界时。方法是:必要时对协调世界时作一整秒的调整(增加1秒或去掉1秒),使UTC和世界时的时刻之差保持在±0.9秒以内。这一技术措施就称为闰秒(或跳秒),增加1秒称为正闰秒(或正跳秒);去掉1秒称为负闰秒(或负跳秒)。是否闰秒,由国际地球自转服务组织(IERS)决定。闰秒的首选日期是每年的12月31日和6月30日,或者是3月31日和9月30日。如果是正闰秒,则在闰秒当天的23时59分59秒后插入1秒,插入后的时序是:…58秒,59秒,60秒,0秒,…,这表示地球自转慢了,这一天不是86400秒,而是86401秒;如果是负闰秒,则把闰秒当天23时59分中的第59秒去掉,去掉后的时序是:…57秒,58秒,0秒,…,这一天是86399秒。

最近的一次闰秒是在2005年底实施的。2005年7月4日,国际地球自转服务组织(IERS)发布C公报,协调世界时(UTC)将在2005年底实施一个正闰秒,即增加1秒。届时,所有的时钟将拨慢1秒。具体实施步骤如下:

UTC协调世界时:

23时59分59秒(2005年12月31日)

23时59分60秒(2005年12月31日)

00时00分00秒(2006年1月1日)

相应地,北京时间:

7时59分59秒(2006年1月1日)

7时59分60秒(2006年1月1日)

8时00分00秒(2006年1月1日)

之前的一次闰秒发生在1999年1月1日。国家授时中心(陕西天文台)在1998年11月的《时间频率公报》中提前数月向全国时间用户通知了这一消息,使BPM、BPL时号用户周知。

历年UTC跳秒情况见附表一。

跳秒始于1972年1月1日,在此之前UTC相对于TA的调整调整采用调偏频率的方法,调整情况见附表二。

值得注意的是原子时与世界时分别来自于两个互不相干的系统,虽然协调时基本上解决了两者之间的协调问题,但是由于地球自转速度越来越慢加之不均匀,闰秒时间间隔也不均匀。

(二)时间转换

本地时间=UTC+时区差(北京时间=UTC+8)

GPS时间与UTC时间差了一个闰秒。闰秒数在下行的导航电文中有反应。GPGGA和GPRMC中本身已经将GPS时间转换为UTC时间了。

北京时间=GPS时+8小时-闰秒。

(三)UTC时间转换为北京时间的转换程序(2000年以后)

输入参数:年(2位),月,日,时,分,秒

void Calc( int y, int m, int d, int hh, int mm, int ss )

{

int w; // 星期

hh += 8; // 格林威治时间+ 8 小时= 北京时间

if( hh < 24 ) goto l_out; // 没有跨天,则计算完成

///////////// 下面是跨天后的计算/////////////////////////////

hh -= 24;

d ++; // 日期加一天

switch( m ) // 按月判断

{

case 4: case 6: // 跨小月的判断

case 9: case 11:

if( d > 30 ) {

d = 1; m ++;

}

break;

case 1: case 3: // 跨大月的判断

case 5: case 7:

case 8: case 10:

if( d > 31 ) {

d = 1; m ++;

}

break;

case 12: // 12 月,要判断是否跨年

if( d > 31 ) {

y ++; d = 1; m = 1;

}

break;

case 2: // 2 月,要判断是否是闰年

if( ( (y+2000)%400 == 0 ) || // 能被400整除,一定是闰年

( (y+2000)%4 ==0 ) && ( (y+2000)%100 !=0 ) ) // 能被4整除,但不能被100整除,一定是闰年 {

if( d>29 ) // 闰年2月,可以有29号

{

相关文档
最新文档