一、格林威治时间转北京时间
GPS时间为格林威治时间,而 北京时间=GMT时间+8小时。
两者转换的算法:
参看:C语言实现格林威治时间转北京时间
参看:STM32开发 – UTC、UNIX时间戳、北京时间之间的转换
日期数据结构定义:
typedef struct
{
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
}time_t;
转换实现:
void UTCToBeijing(time_t* time)
{
uint8_t days = 0;
if (time->month == 1 || time->month == 3 || time->month == 5 || time->month == 7 || time->month == 8 || time->month == 10 || time->month == 12)
{
days = 31;
}
else if (time->month == 4 || time->month == 6 || time->month == 9 || time->month == 11)
{
days = 30;
}
else if (time->month == 2)
{
if ((time->year % 400 == 0) || ((time->year % 4 == 0) && (time->year % 100 != 0))) /* 判断平年还是闰年 */
{
days = 29;
}
else
{
days = 28;
}
}
time->hour += 8; /* 北京时间比格林威治时间快8小时 */
if (time->hour >= 24) /* 跨天 */
{
time->hour -= 24;
time->day++;
if (time->day > days) /* 跨月 */
{
time->day = 1;
time->month++;
if (time->month > 12) /* 跨年 */
{
time->year++;
}
}
}
}
二、设置系统时间
使用 date time这两个DOC指令
例如:
date 2020.11.11 & time 11:11:11
三、Visual Studio编译生成的应用以管理员身份运行配置
如果需要以管理员身份运行,需要如下配置:
属性->链接器->清单文件->UAC执行级别
选择 requireAdministrator (/level=‘requireAdministrator’)