alios things IOT_Linkkit_Query查询时间

在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位的长整型数据,返回的是时间结构体

 

你可能感兴趣的:(alios,things)