(1)为了保证导航和定位精度,全球定位系统GPS建立了专门的时间系统———GPS系统时,简称GPST。
(2)GPST属原子时系统,其秒长为国际制秒(SI),与原子时相同,但其起点与国际原子时(IAT)不同。因此GPST与IAT之间存在一个常数差,它们的关系为:
IAT – GPST = 19s
(3)GPST与UTC规定于1980年1月1日0时相一致,其后随着时间成整数倍积累, 至2017年底该差值为18s。GPST由主控站原子钟控制。
GPST = UTC(USNO) + ΔtUTC
ΔtUTC为GPST和UTC之间的闰秒差,在GPS导航电文中播发。

1. GPS周-周内秒与日历时的转换与逆转换

1.1 GPS周-周内秒到年月日系统的转换
//GPS周-周内秒到年月日系统的转换
//gpsWeek:GPS周;
//gpsWIS:gps周内秒
static private DateTime gps_WeekWIS_NYR(int gpsWeek, int gpsWIS)
{
    //604800 = 7*24*60*60 (一周的秒数)
    int difFromBegin = gpsWeek * 604800 + gpsWIS;
    //GPS以1980年1月6日,0时0分0秒为起点,用周数和周内秒数来表示
    DateTime gpsBeginTime = new DateTime(1980, 1, 6, 0, 0, 0);
    //AddSeconds():将指定的秒数加到实际值上
    return gpsBeginTime.AddSeconds(difFromBegin);
}
1.2 GPS日历时与周-周内秒的转换
//GPS日历时与周-周内秒的转换
static private int[] gps_NYR_WeekWIS(DateTime gpsNYR)
{
    int[] gpsWeekWIS = {0, 0};
    DateTime gpsBeginUTC = new DateTime(1980, 1, 6, 0, 0, 0);
    //计算两个UTC时的时间间隔
    TimeSpan interval = gpsNYR - gpsBeginUTC;
    //计算周
    int gpsWeek = (int)interval.TotalSeconds / 604800;
    //计算周内秒
    int gpsWIS = (int)interval.TotalSeconds % 604800;

    gpsWeekWIS[0] = gpsWeek;
    gpsWeekWIS[1] = gpsWIS;
    return gpsWeekWIS;
}
1.3 主函数调用
static void Main(string[] args)
{
   int[] gpsWeekWIS = { 2023, 432000 };
   Console.WriteLine("GPS周-周内秒:");
   Console.WriteLine("GPS周:{0:D},周内秒:{1:D}", gpsWeekWIS[0], gpsWeekWIS[1]);
   Console.WriteLine("----------------------------------------------------------");
   //====1、GPS周-周内秒与日历时的转换与逆转换====
   Console.Write("GPS周-周内秒对应日历时:");
   Console.WriteLine(gps_WeekWIS_NYR(gpsWeekWIS[0], gpsWeekWIS[1]));

   Console.Write("GPS年月日对应周-周内秒:");
   DateTime gpsNYR = new DateTime(2018, 10, 19, 0, 0, 0);
   int[] gpsWeekWISFromGpsNYR = gps_NYR_WeekWIS(gpsNYR);
   Console.WriteLine("GPS周:{0:D},周内秒:{1:D}", gpsWeekWISFromGpsNYR[0], gpsWeekWISFromGpsNYR[1]);
   Console.WriteLine("----------------------------------------------------------");
   Console.ReadLine();
}
1.4 运行结果

在这里插入图片描述

2. GPS周-周内秒与UTC时间系统的转换与逆转换

2.1 GPS周-周内秒到UTC时间系统的转换
//GPS周-周内秒到年月日系统的转换
//gpsWeek:GPS周;
//gpsWIS:gps周内秒
static private DateTime gps_WeekWIS_NYR(int gpsWeek, int gpsWIS)
{
    //604800 = 7*24*60*60 (一周的秒数)
    int difFromBegin = gpsWeek * 604800 + gpsWIS;
    //GPS以1980年1月6日,0时0分0秒为起点,用周数和周内秒数来表示
    DateTime gpsBeginTime = new DateTime(1980, 1, 6, 0, 0, 0);
    //AddSeconds():将指定的秒数加到实际值上
    return gpsBeginTime.AddSeconds(difFromBegin);
}

static private DateTime gps_WeekWIS_UTC(int gpsWeek, int gpsWIS)
{
    DateTime gpsNYR = gps_WeekWIS_NYR(gpsWeek, gpsWIS);
    //GPS日历时比UTC时快18秒
    return gpsNYR.AddSeconds(-18.0);
}
2.2 GPS UTC时间系统到周-周内秒的转换
//GPS日历时与周-周内秒的转换
static private int[] gps_NYR_WeekWIS(DateTime gpsNYR)
{
    int[] gpsWeekWIS = {0, 0};
    DateTime gpsBeginUTC = new DateTime(1980, 1, 6, 0, 0, 0);
    //计算两个UTC时的时间间隔
    TimeSpan interval = gpsNYR - gpsBeginUTC;
    //计算周
    int gpsWeek = (int)interval.TotalSeconds / 604800;
    //计算周内秒
    int gpsWIS = (int)interval.TotalSeconds % 604800;

    gpsWeekWIS[0] = gpsWeek;
    gpsWeekWIS[1] = gpsWIS;
    return gpsWeekWIS;
}

//GPSUTC时间系统到周-周内秒的转换
static private int[] gps_UTC_WeekWIS(DateTime gpsUTC)
{
    return gps_NYR_WeekWIS(gpsUTC.AddSeconds(18));
}
2.3 主函数调用
static void Main(string[] args)
{
    int[] gpsWeekWIS = { 2023, 432000 };
    Console.WriteLine("GPS周-周内秒:");
    Console.WriteLine("GPS周:{0:D},周内秒:{1:D}", gpsWeekWIS[0], gpsWeekWIS[1]);
    Console.WriteLine("----------------------------------------------------------");
    //====2.GPS周-周内秒与UTC时间系统的转换与逆转换====
    Console.Write("GPS周-周内秒对应UTC时:");
    Console.WriteLine(gps_WeekWIS_UTC(gpsWeekWIS[0], gpsWeekWIS[1]));

    Console.Write("UTC对应GPS周-周内秒:");
    DateTime gpsUTC = new DateTime(2018, 10, 18, 23, 59, 42);
    int[] gpsWeekWISFromGpsUTC = gps_UTC_WeekWIS(gpsUTC);
    Console.WriteLine("GPS周:{0:D},周内秒:{1:D}", gpsWeekWISFromGpsUTC[0], gpsWeekWISFromGpsUTC[1]);
    Console.WriteLine("----------------------------------------------------------");            
    Console.ReadLine();
}
2.4 运行结果

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐