RT Thead 开发之RTC时间校正总结

首先必须确定一个概念和几个函数的定义和用法。

概念

RTC时间校正必须永远保证设定保存的是 UTC 时间,当你需要读取时间时,再根据当前时区转换为本地时间。因为UTC 是基准时间,有了UTC ,可以很方便的算出世界上任何一个地方的地区时间。

基本函数

1,time_t time(time_t *t)

获取系统UTC 时间戳

2,struct tm* localtime(const time_t* t)

通过UTC 时间戳 ,转换本地时间 ,即自动加上时区对应的秒数,再转换tm 格式的时间,返回指针 tm*

3,time_t mktime(struct tm * const t)

将本地时间结构体tm 转换为 UTC 时间戳,它会按时区自动扣减相应的秒数。

4, tm 结构体定义:

struct tm {

int tm_sec; // 秒 [0, 59]

int tm_min; // 分 [0, 59]

int tm_hour; // 时 [0, 23]

int tm_mday; // 日 [1, 31]

int tm_mon; // 月 [0, 11](0 表示 1 月)

int tm_year; // 年(实际年份 = tm_year + 1900)

int tm_wday; // 周几 [0, 6](0 表示周日)

int tm_yday; // 一年中的第几天 [0, 365]

int tm_isdst; // 夏令时标志(>0: 启用,0: 禁用,<0: 未知)

5, 更新RTC时 , 需先得到tm 结构体格式的时间,如上图所示,再先后调用set_time,set_date,

注意,tm 结构体格式的时间须是 本地时间,set_time 函数会自动根据时区来扣减秒数。

set_date 函数需要真实的年份数字和月份数字,故 年份要加1900 ,月份加1。

set_time(st_tm.tm_hour, st_tm.tm_min, st_tm.tm_sec);

set_date(st_tm.tm_year +1900 , st_tm.tm_mon +1, st_tm.tm_mday);

先想到这些,其它的以后再总结