周-周内秒转化为utc时间 c语言实现

用过北斗gps的都晓得,大部分都要用时间转换的操作:

本文主要是记录: 周-周内秒转换为utc的实现

北斗官网提供的一些转换源码,注册即可下载

至于儒略日 周-周内秒 utc等概念去查一查百度很多资料; 

这个网址对这些概念有一个大概的描述,对刚接触的人来说个人感觉还不错。

 http://www.fmddlmyy.cn/text8.html

http://www.fmddlmyy.cn/text59.html

验证网站:提供了gps local utc等多个时间的动态表格;

http://leapsecond.com/java/gpsclock.htm

#include <stdio.h>
#include <time.h>
	
	
const static double gpst0[]={1980,1, 6,0,0,0};  //起始时间
#define   LEAPS   18

typedef struct {        /* time struct */ 
    time_t time;        /* time (s) expressed by standard time_t */ 
    double sec;         /* fraction of second under 1 s */ 
} gtime_t; 

gtime_t epoch2time(const double *ep) 
{ 
    const int doy[]={1,32,60,91,121,152,182,213,244,274,305,335}; 
    gtime_t time={0}; 
    int days,sec,year=(int)ep[0],mon=(int)ep[1],day=(int)ep[2]; 
     
    if (year<1970||2099<year||mon<1||12<mon) return time; 
     
    /* leap year if year%4==0 in 1901-2099 */ 
    days=(year-1970)*365+(year-1969)/4+doy[mon-1]+day-2+(year%4==0&&mon>=3?1:0); 
    sec=(int)floor(ep[5]); 
    time.time=(time_t)days*86400+(int)ep[3]*3600+(int)ep[4]*60+sec; 
    time.sec=ep[5]-sec; 
    return time; 
} 

gtime_t gpst2time(int week, double sec) 
{ 
    gtime_t t=epoch2time(gpst0); 
     
    if (sec<-1E9||1E9<sec) sec=0.0; 
    t.time+=86400*7*week+(int)sec; 
    t.sec=sec-(int)sec; 
    return t; 
} 

gtime_t timeadd(gtime_t t, double sec) 
{ 
    double tt; 
    t.sec+=sec; tt=floor(t.sec); t.time+=(int)tt; t.sec-=tt; 
    return t; 
} 

gtime_t GPSTime2UTCTime(int week,double sec,double leapsec) 
{ 
    gtime_t gpst = gpst2time(week,sec); 
    return timeadd(gpst,-leapsec); 
}	


int main () {
	gtime_t GPSTime;
	struct tm * gpstimeinfo;
	unsigned short gpsweek;
	unsigned long  gpssec;
	unsigned char recv_data[23];    
	
	recv_data[8] =  0x73;
	recv_data[9] =  0xef;
    recv_data[14] =  0x08;
	recv_data[15] =  0x5c;

	gpsweek = (unsigned short)(recv_data[14] << 8) + recv_data[15];
	gpssec  = (unsigned long )(recv_data[6] << 24) + (unsigned long)(recv_data[7] << 16)
		       + (unsigned long)(recv_data[8] << 8) + recv_data[9];
	GPSTime = GPSTime2UTCTime(gpsweek, gpssec, LEAPS);
	gpstimeinfo = localtime(&GPSTime.time);
	printf("year=%d,mouth=%d,day=%d,hour=%d,min=%d,sec=%d", gpstimeinfo->tm_year+1900, gpstimeinfo->tm_mon+1,       gpstimeinfo->tm_mday, gpstimeinfo->tm_hour, gpstimeinfo->tm_min, gpstimeinfo->tm_sec);
	return 0;
}

 

### 回答1: 首先需要了解GPS周内的概念。GPS是GPS系统使用的一种时间标准,从1980年1月6日开始计算,每的起始时间日零时。而周内则是在一时间内,从0开始计算到604800,即一的总数。 如果要将C语言中的GPS周内换成UTC时间,需要使用一些数学和计算方法。首先需要获取当前时间的GPS周内,然后将其换成UTC时间,即世界协调时。 换方法如下: 1. 将当前的GPS周内分别换算成总数。 2. 根据GPS的起始时间(1980年1月6日),计算出当前时间距离起始时间的总数。 3. 将当前时间的总数加上起始时间的总数,即可得到UTC时间的总数。 4. 将UTC时间的总换成具体的年、月、日、时、分、时间格式。 对于C语言实现,可以使用time.h头文件中的time函数来获取当前时间,然后进行以上的计算和换。需要注意的是,由于GPS周内是整数类型,计算过程中会涉及到除法、乘法、取模等运算,因此需要注意精度和数据类型换的问题,同时还要考虑时区的影响。 总之,将C语言的GPS周内换成UTC时间需要一定的数学和计算基础,但实现起来并不难,只需要注意精度和数据类型换即可。 ### 回答2: C语言GPS周内换成UTC是一个常见的时间换问题。GPS周内是GPS系统使用的时间表示方式,而UTC是通用的协调世界时,用于协调全球各地的时间。 要将C语言中的GPS周内换成UTC,需要知道以下几个关键信息: 1. GPS起始时间:GPS起始时间是1980年1月6日0时0分0。这一点非常重要,因为GPS周内都是从这个时间开始计算的。 2. GPS数和周内数:GPS数是自GPS起始时间以来的第几周内数是当前周内数。 3. UTC起始时间UTC起始时间是1970年1月1日0时0分0。这是通用的时间表示方式,用于协调全球各地的时间。 有了以上三个关键信息,我们可以采用如下步骤将C语言中的GPS周内换成UTC: 1. 将GPS数和周内换成总数。总数 = GPS数 * 604800 + 周内数。 2. 计算 GPS 起始时间UTC 起始时间之间的数差,即 delta_t = 315964800。 3. UTC时间 = 总数 - delta_t。 例如,如果要将 GPS 时间换成 UTC 时间,假设 GPS 时间为第 2000 周内数为 345678,那么总数 = 2000 * 604800 + 345678 = 1219165178 。然后,delta_t = 315964800 ,所以 UTC 时间 = 1219165178 - 315964800 = 903200378 。最后,将 UTC 时间换成日期和时间表示即可。 总之,C语言中的GPS周内换成UTC需要通过一定的计算和换过程。有了以上关键信息和步骤,我们可以轻松换出UTC时间,并将其换成日期和时间表示。 ### 回答3: C语言是一种广泛应用于嵌入式系统、操作系统、驱动程序等方面的高级编程语言。在GPS系统中,不同的时间格式有着不同的意义,关于GPS周内UTC之间的换,可以使用C语言实现。 GPS周内是GPS系统中使用的时间格式,GPS是从1980年1月6日0时开始计算的数,而周内周内数,两者结合可以表示一个准确的GPS时间。而UTC则是世界协调时,是全球标准的时间,不受地球自的影响。 C语言提供了标准时间库函数,可以用于处理时间相关的操作。通过使用time.h头文件中的函数,我们可以获取当前系统时间,并进行UTC和GPS时间格式间的相互换。 对于GPS周内换为UTC时间,我们可以使用以下的算法: 1.计算自1980年1月6日0时起的数:gps_seconds = gps_week * 604800 + week_seconds 2.将所得到的数减去18,得到从UTC1970年1月1日0时开始算起的数:utc_seconds = gps_seconds - 18 3.使用标准时间库函数convert utc_seconds to tm格式 代码示例: #include <stdio.h> #include <time.h> int main() { time_t gps_seconds = 1234567890; int gps_week = gps_seconds / 604800; int week_seconds = gps_seconds % 604800; time_t utc_seconds = gps_seconds - 18; struct tm * timeinfo_gps, * timeinfo_utc; timeinfo_gps = gmtime(&gps_seconds); timeinfo_utc = gmtime(&utc_seconds); printf("GPS time:week %d, seconds %d\n", gps_week, week_seconds); printf("UTC time:%s\n", asctime(timeinfo_utc)); return 0; } 以上就是C语言GPS周内换成UTC的方法,通过这种方法可以在程序中使用不同的时间格式,并且实现它们之间的相互换,方便程序的开发。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值