GPS时间转北京时间

  • 前言
  • 一、头文件
  • 二、主函数
  • 三、讨论

前言

目前,我们解析到的美国惯导实验室的INS-D惯导的GPS时间是以伦敦格林尼治时间每周一的零点为起点,每周日的24点为终点的毫秒级时间。比如29551030,这个时间戳对于我们的使用是极不方便的。因此,需要对这个时间戳进行时间格式的转换。这一时间戳对应的伦敦时间是周一的8点12分31秒30毫秒,北京时间为周一的16点12分31秒30毫秒。
下文的函数即是实现这一转换。
关于伦敦时间如何转换北京时间,请参考我的另一篇博文GNSS时间时区转换。

一、头文件

gps2bjtime.h

为了便于统一时间格式,此头文件建立TIME结构体,用于储存周、天、北京时间等数据。

#ifndef GPS2BJTIME_H_
#define GPS2BJTIME_H_typedef struct
{int week = 0;int day = 0;double BJtime = 0.0;double LDtime = 0.0;
}TIME;#endif

数据解释:

  • week表示周数,取值为0或1,-1表示输入数据无效(下同)。由于北京时间晚于伦敦时间8个小时,所以伦敦时间周日下午4点之后的时间对应的北京时间为下一周的周一时间,所以取值为1表示下个一周。
  • day表示星期几,1到7表示星期一到星期日。
  • BJtime表示转换后的北京时间,以123456.789为例,表示12时34分56秒789毫秒。时间格式为24小时制。
  • LDtime表示转换后的伦敦时间,时间格式同上,但是这一时间暂无对应的星期和周数。

二、主函数

gps2bjtime.cpp

直接上代码。

#include "gps2bjtime.h"
#include <iostream>
#include <iomanip>
using std::cout;
using std::endl;
using std::fixed;
using std::setprecision;TIME gpstime2BJtime(int gpstime)
{TIME time;// Check if input is validif(gpstime < 0 || gpstime > 7 * 24 * 60 * 60 * 1000){time.week = -1;time.day = -1;time.BJtime = -1;time.LDtime = -1;return time;}else{int one_day_in_ms = 24 * 60 * 60 * 1000;int one_hour_in_ms = 60 * 60 * 1000;int one_minute_in_ms = 60 * 1000;;int one_second_in_ms = 1000;// >>>>> Get day in a weekint day = gpstime / one_day_in_ms;int ms_left = gpstime % one_day_in_ms;        if(day > 6 || day < 0) time.day = -1;    // Out of rangeelse time.day = day + 1;// >>>>> Get hour in a day         int hour = ms_left / one_hour_in_ms;    // London timems_left = ms_left % one_hour_in_ms;               // >>>>> Get minutes in an hour int minutes = ms_left / one_minute_in_ms;ms_left = ms_left % one_minute_in_ms;// >>>>> Get seconds in a minute int seconds = ms_left / one_second_in_ms;ms_left = ms_left % one_second_in_ms;  // >>>>> Integrite London timedouble ld_time = hour * 1e4 + minutes * 1e2 + seconds + ms_left * 1e-3;time.LDtime = ld_time;      // >>>>> Time Zone conversionint time_zone = 8;    // Beijing is 8 hour late of London timeif(hour + time_zone > 23){time.day += 1;hour = hour + time_zone - 24;if(time.day > 6) {time.week = 1;time.day -= 7;}else time.week = 0;}else{hour += time_zone;}// >>>>> Integrite BJ timedouble bj_time = hour * 1e4 + minutes * 1e2 + seconds + ms_left * 1e-3;time.BJtime = bj_time;return time;}
}int main()
{TIME time;time = gpstime2BJtime(29551030);cout<<"LDtime = "<<fixed<<setprecision(3)<<time.LDtime<<endl;cout<<"week = "<<time.week<<endl;cout<<"day = "<<time.day<<endl;    cout<<"BJtime = "<<fixed<<setprecision(3)<<time.BJtime<<endl;return 0;
}

输出如下:

LDtime = 81231.030
week = 0
day = 1
BJtime = 161231.030

三、讨论

欢迎大家对该函数的代码进行讨论。欢迎大家对我的代码提出修改意见。

GPS时间转北京时间相关推荐

  1. GPS UTC与北京时间的转换函数

    GPS UTC与北京时间的转换函数 http://download.csdn.net/detail/dj8angus/5707493 UNIX Time 时间戳 与 北京时间 相互转换 http:// ...

  2. GPS秒转北京时间(年月日时分秒)+ gps 周、周内秒转gps时间戳(单位秒) C++ 代码

    目录 一.GPS秒转北京时间(年月日时分秒)- 代码如下: 二.gps

  3. 测绘人须知,激光雷达中UTC时间、GPS时间和北京时间三者之间的关系

    测绘人对于"时间"有着天然的敏感,尤其在接触激光雷达系统之后,发现有好多"时间"呐.UTC时间.GPS时间和北京时间,以后还有很多机会接触北斗时间.相信各位不会 ...

  4. c语言utc时间转换北京时间_C/C++标准库之转换UTC时间到local本地时间详解

    前言 UTC 时间DateTime.UtcNow 和 系统本地时间 DateTime.Now 相差8个时区 ,美国本地时间和北京时间相差15个时区: 美国,而一般使用UTC时间方便统一各地区时间差异. ...

  5. 获取北京时间授时api stm32 esp8266获取北京时间、年月日、星期api GMT格林威时间转换北京时间

    苏宁获取北京时间的api不要太方便:http://quan.suning.com/getSysTime.do 使用 Fidder抓包调试,查看HTTP返回报文: 双击左侧抓取到的HTTP返回报文.使用 ...

  6. C#之Unix时间和北京时间互转

    Unix时间起始时间为1970年1月1日0时0分0秒 北京时间起始时间为1970年1月1日8时0分0秒 北京时间转Unix时间如下: DateTime dtUnix = new DateTime(19 ...

  7. Internet时间自动同步后,计算机系统时间比北京时间不能同步一致

    环景: win10 专业版 2019AD域环境 IPguard管控客户端 问题描述: 与time.windows.com,Internet时间自动同步后,计算机系统时间比北京时间慢一分钟,有时又快一分 ...

  8. php输出世界时转北京时,php中把美国时间转为北京时间的自定义函数分享

    php中把美国时间转为北京时间的自定义函数分享 由于最近做邮件系统用到了时间转化,需要把从谷歌gmail下载下来的邮件时间转化为北京时间,于是乎就写了一个时间转化函数,希望对有需要的盆友所有启迪,我们 ...

  9. Ubuntu修改系统时间到北京时间的步骤

    Ubuntu修改系统时间到北京时间的步骤: ①输入date查看当前时间 date ②输入tzselect,进入时区选择,然后依次选择Asia>China>Beijing Time,选择时输 ...

  10. 美国东部时间和北京时间之间的转换

    美国东部时间在UTC-5时区,北京时间是UTC+8时区,正常情况下美东时间比北京时间晚13个小时.需要注意的是美国有夏令时,而北京没有夏令时,美国夏令时时会让时间快一个小时,让人民早起早睡,所以在美国 ...

最新文章

  1. 如何升级jdk_简述面试常见问题的锁升级与锁优化
  2. Hibernate缓存原理与策略 Hibernate缓存原理:
  3. ubantu 添加防火墙策略_企业环境下用脚本设置ubuntu防火墙
  4. Spring Cloud 2020 年路线图:二季度Spring Boot 2.3、四季度Spring Cloud Ilford
  5. 我是该高兴呢还是悲伤呢?
  6. 转-Multicast server and client in Python
  7. 小电商的延时队列设计概要
  8. java system.load()_System.load()与System.loadLibrary()
  9. 程序员专属段子集锦 7/10
  10. php 判断是否ipv6,PHP IPV6正则表达式验证代码
  11. Android View框架总结(七)View事件分发机制
  12. 帆软动态分页之多数据集层式报表
  13. SWMM模型及自主开发城市内涝一维二维耦合软件的复杂城市排水系统建模技术及在城市排涝、海绵城市等领域实践应用
  14. 常见的网络协议\端口号
  15. JS根据城市名称获取所在省份
  16. iserdese2接口详解_Xilinx FPGA LVDS应用
  17. linux下几款可用网盘对比
  18. python中检测键盘(上下左右) 代码
  19. ❥关于C++之写入/读取文本文件
  20. 工程学导论的学习感悟

热门文章

  1. 怎么在搜索计算机学报的论文,计算机学报方面论文题目 计算机学报论文标题如何定...
  2. 京东金融App崩溃治理实践
  3. Unity 对接友盟与TalkingData数据平台(简易版)
  4. 相机快门、 光圈有啥区别?
  5. tomcat服务器拒绝访问文件,tomcat拒绝访问特定文件
  6. 存储服务器 自建,搭建及了解存储服务器
  7. 《财富》推荐的75部必看书籍
  8. 传统蓝牙HCI Command(蓝牙HCI命令)详细介绍
  9. linux下usb 驱动
  10. 2-AltiumDesigner原理图设计