(1)北斗卫星导航系统的时间基准为北斗时(BDT),BDT采用国际单位制(SI)秒为基本单位连续累计,不闰秒,起始历元为2006年1月1日协调世界时(UTC)00时00分00秒。
(2)GPST属原子时系统,其秒长为国际制秒(SI),与原子时相同,但其起点与国际原子时(IAT)不同。GPST与UTC规定于1980年1月1日0时相一致。
( 3)BDT溯源到中国科学院国家授时中心(NTSC)保持的UTC时间,简称UTC(NTSC),与UTC之间的闰秒信息在导航电文中播报。BDT与UTC的偏差保持在100纳秒以内(模1秒)。
(4)北斗时和GPS时相差14秒
(5)gps开始时间为"1980-01-06 00:00:00",北斗开始时间为:“2006-01-01 00:00:00”。
1356是1980-01-06 至2006-01-01相差1356周;
1980 1984 1988 1992 1996 2000 2004闰年;
1981 1982 1983 1985 1986 1987 1989 1990 1991 1993 1994 1995 1997 1998 1999 2001 2002 2003 2005不是闰年;
((7366+19365)-5)/ 7=1356
1.判断闰年or平年
#if 1
int main()
{
int year;
/*printf("输入年份: ");
scanf("%d",&year);*/
for(year=1980; year<2006; year++)
{
if(year%4 == 0)
{
if( year%100 == 0)
{
//这里如果被400整除是闰年
if ( year%400 == 0)
printf("%d 闰年", year);//闰年
else
printf("%d 不是闰年", year);//不是闰年
}
else
//被4整除,不能被100整除的是闰年
printf("%d 是闰年", year );//闰年
}
else
printf("%d 不是闰年", year);//不是闰年
}
system("pause");
return 0;
}
#endif
2.GPS周-周内秒向BDS周-周周内秒的转换
//GPS周-周内秒向BDS周-周周内秒的转换
static private int[] gpsWeekWIS_bdsWeekWIS(int gpsWeek, int gpsWIS)
{
int[] bdsWeekWIS = { 0, 0 };
int difFromBegin = gpsWeek * 604800 + gpsWIS - 1356 * 604800 - 14;
//计算北斗周
int bdsWeek = difFromBegin / 604800;
//计算北斗秒
int bdsWIS = difFromBegin % 604800;
bdsWeekWIS[0] = bdsWeek;
bdsWeekWIS[1] = bdsWIS;
return bdsWeekWIS;
}
3.BDS周-周内秒到GPS周-周内秒的转换
//BDS周-周内秒到GPS周-周内秒的转换
static private int[] bdsWeekWIS_gpsWeekWIS(int bdsWeek, int bdsWIS)
{
int[] gpsWeekWIS = { 0, 0 };
int secDifGPS2BDS = bdsWeek * 604800 + bdsWIS + 1356 * 604800 + 14;
int gpsWeek = secDifGPS2BDS / 604800;
int gpsWIS = secDifGPS2BDS % 604800;
gpsWeekWIS[0] = gpsWeek;
gpsWeekWIS[1] = gpsWIS;
return gpsWeekWIS;
}
4.主函数调用
static void Main(string[] args)
{
int[] gpsWeekWIS = { 2023, 432000 };
Console.WriteLine("BDS周:{0:D},周内秒:{1:D}", gpsWeekWIS[0], gpsWeekWIS[1]);
Console.WriteLine("*********************************");
Console.Write("GPS周-周内秒 <--> BDS周-周内秒:");
int[] bdsWeekWIS = gpsWeekWIS_bdsWeekWIS(gpsWeekWIS[0], gpsWeekWIS[1]);
Console.WriteLine("BDS周:{0:D},周内秒:{1:D}", bdsWeekWIS[0], bdsWeekWIS[1]);
Console.WriteLine("*********************************");
//Console.ReadLine();
Console.Write("BDS周-周内秒 <--> GPS周-周内秒:");
int[] gpsWeekWISFromBDS = bdsWeekWIS_gpsWeekWIS(bdsWeekWIS[0], bdsWeekWIS[1]);
Console.WriteLine("GPS周:{0:D},周内秒:{1:D}", gpsWeekWISFromBDS[0], gpsWeekWISFromBDS[1]);
Console.ReadLine();
}