如何计算UTC与本地时间(北京时间)的时区差:详细指南
UTC + 时区差 = 本地时间

时区差中,东边的为正,西边的为负。在此情况下,将东八区的时区差记为 +0800。
UTC + (+0800) = 本地(北京)时间 (1)
那么,UTC 等于本地时间(北京时间)减去 0800 。
0942 - 0800 = 0142
UTC 是当天凌晨一点四十二分二十二秒。若结果为负数,那就表示是 UTC 前一天。将这个负数加上 2400 ,就得到 UTC 在前一天的时间。如果本地(北京)时间是 0432(凌晨四点三十二分),那么,UTC 为 0432 减去 0800 等于-0368,负号表示是前一天,-0368 加上 2400 等于 2032,也就是前一天的晚上八点三十二分。
//UTC转换为北京时间 函数可直接调用
定义一个名为 UTCToBeijing 的函数,该函数接收六个参数,分别是无符号整数 UTCyear 表示 UTC 时间的年份,无符号字符型 UTCmonth 表示 UTC 时间的月份,无符号字符型 UTCday 表示 UTC 时间的日期,无符号整数 UTChour 表示 UTC 时间的小时,无符号字符型 UTCminute 表示 UTC 时间的分钟,无符号字符型 UTCsecond 表示 UTC 时间的秒。
{
定义了三个整数变量 year、month、day 和一个整数变量 hour,它们的值都初始化为 0。
int lastday = 0;// 月的最后一天日期
int 表示整数类型,lastlastday 被初始化为 0,它代表的是上月的最后一天的日期。
year=UTCyear;
month=UTCmonth;
day=UTCday;
hour=UTChour+8;//UTC+8转换为北京时间
如果 month 等于 1 ,或者 month 等于 3 ,或者 month 等于 5 ,或者 month 等于 7 ,或者 month 等于 8 ,或者 month 等于 10 ,或者 month 等于 12 。
{
lastday = 31;
if(month == 3)
{
如果 year 能被 400 整除,或者 year 能被 4 整除且 year0 不等于 0,那么就是闰年,用于判断是否为闰年
lastday 等于 29;闰年的 2 月是 29 天,平年的 2 月是 28 天。
else
lastlastday = 28;
}
if(month == 8)
lastlastday = 31;
}
else
如果 month 等于 4 ,或者 month 等于 6 ,或者 month 等于 9 ,或者 month 等于 11
{
lastday = 30;
lastlastday = 31;
}
else
{
lastlastday = 31;
如果(年份能被 400 整除)或者(年份能被 4 整除且年份不为 0),那么这一年如果是闰年,2 月就有 29 天;如果是平年,2 月就有 28 天。
lastday = 29;
else
lastday = 28;
}
如果小时数大于或等于 24 :00 ,那么应该减去 24 :00 ,并且日期要加一天
{
hour -= 24;
day += 1;
如果算出的日期大于该月最后一天,那么就应减去该月最后一天的日期,并且月份要加上一个月。
{
day -= lastday;
month += 1;
如果月份大于 12,那么应减去 12,同时年份加上 1 年。
{
month -= 12;
year += 1;
}
}
}
使用 sprintf 函数,将数据按照特定格式写入到 (char *)bjttbuf 中,格式为 "d/d/d,d:d:d" 。
在 year-2000 年的某个月、某天、某小时,将 gpsx.utc.min(UTC 分钟)和 gpsx.utc.sec(UTC 秒)转换为北京时间
// Uart1_SendStr(bjttbuf);
// Uart1_SendStr("\r\n");
}