GPS时间转北京时间

您所在的位置:网站首页 北京时间时间年月日 GPS时间转北京时间

GPS时间转北京时间

2024-07-12 12:59| 来源: 网络整理| 查看: 265

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 #include using std::cout; using std::endl; using std::fixed; using std::setprecision; TIME gpstime2BJtime(int gpstime) { TIME time; // Check if input is valid if(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 week int day = gpstime / one_day_in_ms; int ms_left = gpstime % one_day_in_ms; if(day > 6 || day >>>> Get hour in a day int hour = ms_left / one_hour_in_ms; // London time ms_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 time double ld_time = hour * 1e4 + minutes * 1e2 + seconds + ms_left * 1e-3; time.LDtime = ld_time; // >>>>> Time Zone conversion int time_zone = 8; // Beijing is 8 hour late of London time if(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 time double 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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3