GNSS时间转换为UTC+8时间
NMEA输出的GNRMC数据中,时间信息是格林威治时间,和我们东八区的时间相差八小时,要将其转换为东八区的时间,可以用以下方法:
#include "math.h"
#include "stdbool.h"
#include "stdint.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "time.h"
#include <sys/time.h>
// 参数举例 t.exe 2020-02-28 18
int main(int argc, char *argv[])
{
if(argc != 3)
{
return -1;
}
int year, month, mday;
int hour;
sscanf(argv[1], "%04d-%02d-%02d", &year, &month, &mday);
sscanf(argv[2], "%02d", &hour);
printf("input: %02d-%02d-%02d %02d:00:00 \r\n", year, month, mday, hour);
char timeString[32];
struct tm *pTm;
struct tm now;
now.tm_year = year - 1900;
now.tm_mon = month - 1;
now.tm_mday = mday;
now.tm_hour = hour;
now.tm_min = 0;
now.tm_sec = 0;
time_t nowSec = mktime(&now);
printf("Secs : %d\r\n", nowSec);
pTm = localtime(&nowSec);
strftime(timeString, sizeof(timeString), "%Y-%m-%d %H:%M:%S", pTm);
printf("UTC+0: %s\r\n", timeString);
nowSec += 3600 * 8; //加上8小时的总秒数
pTm = localtime((time_t*)&nowSec);
(void)pTm;
strftime(timeString, sizeof(timeString), "%Y-%m-%d %H:%M:%S", pTm);
printf("UTC+8: %s\r\n", timeString);
return 0;
}