【GPS周-周内秒、日历时、UTC转换和逆转换】
GPS1. GPS周-周内秒与日历时的转换与逆转换1.1 GPS周-周内秒到年月日系统的转换1.2 GPS日历时与周-周内秒的转换1.3 主函数调用1.4 运行结果2. GPS周-周内秒与UTC时间系统的转换与逆转换2.1 GPS周-周内秒到UTC时间系统的转换2.2 GPS UTC时间系统到周-周内秒的转换2.3 主函数调用2.4 运行结果(1)为了保证导航和定位精度,全球定位系统GPS建立了专
文章共3,107字 · 阅读需要大约11分钟
一键AI生成摘要,助你高效阅读
问答
·
GPS
(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 运行结果
更多推荐
已为社区贡献3条内容
所有评论(0)