获取GPS报文数据/北斗报文数据UTC时间转为北京时间

2024-01-16 05:20

本文主要是介绍获取GPS报文数据/北斗报文数据UTC时间转为北京时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GPS系统时间与UTC时间不同,差了一个闰秒,因为UTC时间是可以调整的,而GPS时间是连续的,闰秒数在下行的导航电文中有反应。

北京时=GPS时+8小时+闰秒

GPGGA和GPRMC中本身已经将GPS时间转换为UTC时间了,所以该时间与北京时间只差8小时。

例如:GPS时间显示为2月27日0时,北京时为2月27日8时。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct UTCtime
{int year;int month;int day;int hour;int min;int sec;
}UTC_TIME;UTC_TIME utctime;//UTC时间转换为北京时间
void UTCToBeijing(unsigned int year,unsigned char month,unsigned char day,unsigned int hour,const unsigned char minute,const unsigned char second)
{hour += 8;if(1==month||3==month||5==month||7==month||8==month||10==month||12==month)//1,3,5,7,8,9,12月每月为31天{if(24 <= hour){hour -= 24;day += 1;//如果超过24小时,减去24小时,后再加上一天if(day > 31){day -= 31;month += 1;}//如果超过31一天,减去31天,后加上一个月}}else if(4==month||6==month||9==month||11==month)//4,6,9,11月每月为30天{if(24 <= hour){hour -= 24;day += 1;//如果超过24小时,减去24小时,后再加上一天if(30 < day){day -= 30;month += 1;}//如果超过30一天,减去30天,后加上一个月}}else//剩下为2月,闰年为29天,平年为28天{if(24 <= hour){hour -= 24;day += 1;if((0 == year%400)||(0 == year%4 && 0 != year%100))//判断是否为闰年,年号能被400整除或年号能被4整除,而不能被100整除为闰年{if(29 < day){day -= 29;month += 1;}}//为闰年else{if(28 < day){day -= 28;month += 1;}}//为平年}}if(12 < month){month-=12;year+=1;}else;utctime.year=year;utctime.month=month;utctime.day=day;utctime.hour=hour;utctime.min=minute;utctime.sec=second;
}int main()
{/*测试GPS转换时间*/utctime.year=2020;utctime.month=2;utctime.day=28;utctime.hour=19;utctime.min=25;utctime.sec=25;printf("转换前时间:%d.%d.%d %d:%d:%d\n",utctime.year,utctime.month,utctime.day,utctime.hour,utctime.min,utctime.sec);UTCToBeijing(utctime.year,utctime.month,utctime.day,utctime.hour,utctime.min,utctime.sec);printf("转换后时间:%d.%d.%d %d:%d:%d\n",utctime.year,utctime.month,utctime.day,utctime.hour,utctime.min,utctime.sec);
}	

运行结果:

 

这篇关于获取GPS报文数据/北斗报文数据UTC时间转为北京时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/611447

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

利用Python把路径转为绝对路径的方法

《利用Python把路径转为绝对路径的方法》在Python中,如果你有一个相对路径并且想将其转换为绝对路径,你可以使用Path对象的resolve()方法,Path是Python标准库pathlib中... 目录1. os.path.abspath 是什么?怎么用?基本用法2. os.path.abspat

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA