如何将RTC的时间转换成Unix时间戳

2019-07-20 07:22发布

如何将RTC的时间转换成Unix时间戳,有例程吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
Eternal单人行
2019-07-20 12:06
[mw_shl_code=c,true]/*****************************
*函数名:Is_leap_year
*功  能:是否闰年
*输  入:
*输  出:
*******************************/
u8 Is_leap_year(u16 year)
{
        if((year%400)==0)
                return 1;
        else if((year%100)==0)
                return 0;
        else if((year%4)==0)
                return 1;
        return 0;
}
/*****************************
*函数名:Days_of_month
*功  能:每月天数
*输  入:
*输  出:
*******************************/
u8 Days_of_month(u16 year,u8 month)
{
        if (month != 2) {
        return day_per_mon[month - 1];
    } else {
        return day_per_mon[1] + Is_leap_year(year);
    }
}
/*****************************
*函数名:utc_sec
*功  能:获取unix时间戳
*输  入:
*输  出:
*******************************/
u32 utc_sec(void)
{
        u8 i;
        u16 days=0;//天数
        u32        secs;        //秒数
        RTC_TimeTypeDef RTC_TimeStruct;
        RTC_DateTypeDef RTC_DateStruct;
        RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
        RTC_GetDate(RTC_Format_BIN,&RTC_DateStruct);
        /* year */
        for(i=UTC_BASE_YEAR;i<RTC_DateStruct.RTC_Year;i++)
                days+=(DAY_PER_YEAR+Is_leap_year(i));
        /* month */
        for(i=1;i<RTC_DateStruct.RTC_Month;i++)
                days+=(DAY_PER_YEAR+Is_leap_year(i));
        /* day */
        days+=(RTC_DateStruct.RTC_Date-1);
        /* sec */
        secs=days*SEC_PER_DAY+(RTC_TimeStruct.Hours*SEC_PER_HOUR+RTC_TimeStruct.RTC_Minutes*SEC_PER_MIN+RTC_TimeStruct.RTC_Seconds);
        return secs;
       
}[/mw_shl_code]

一周热门 更多>