在alios things中我们经常需要用到时间,比如在智能插座开发中,开发倒计时或者本地定时功能时就会用到时间,所以这次我们说说使用IOT_Linkkit_Query获取时间的步骤:
注意:先决条件是要连上阿里云平台
一、注册一个接收时间的回调函数
static void set_time(time_t time)//用于同步本地RTC时钟
{
mico_rtc_time_t set_time;
struct tm *ptr = localtime( &time );//时间戳转时间
set_time.year = ptr->tm_year - 70;
set_time.month = ptr->tm_mon +1;
set_time.date = ptr->tm_mday;
set_time.hr = ptr->tm_hour+8;
set_time.min = ptr->tm_min;
set_time.sec = ptr->tm_sec;
MicoRtcSetTime( &set_time );//这个是MICO里面的时间同步,在alios上请用相应的函数
}
static time_t replace(char *str) //这个函数用于把13位的字符串转成10位的长整型时间戳
{
int s=0;
time_t sum=0;
int len = 10;
while(len--) //当str[i]不为\0时执行循环
{
s = *str++ - '0';
sum = sum*10 + s;
}
return(sum);
}
static void ntp_reply_handler(char *ntp_offset_time_ms)
{
time_t ntp_ms = replace(ntp_offset_time_ms);//字符串转长整型
set_time(ntp_ms);//同步本地rtc时钟
}
IOT_RegisterCallback(ITE_TIMESTAMP_REPLY, ntp_reply_handler);//注册回调函数,用于接收时间
二、使用IOT_Linkkit_Query查询时间(查到的是13位的时间戳)
IOT_Linkkit_Query(user_example_ctx->master_devid, ITM_MSG_QUERY_TIMESTAMP,NULL, 0);
三、时间戳转时间
/*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
int tm_year; // 自 1900 起的年数
int tm_wday; // 一周中的第几天,范围从 0 到 6
int tm_yday; // 一年中的第几天,范围从 0 到 365
int tm_isdst; // 夏令时
};*/
struct tm *ptr = localtime( &time );//参数是10位的长整型数据,返回的是时间结构体