打印

Realview中使用time.h的问题

[复制链接]
2119|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
enjoyic|  楼主 | 2011-12-8 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多系统中的日期和时间是使用C标准库里的time.h里的函数实现功能的,比如gmtime、localtime等。我在realview的安装路径下\Keil\ARM\RV31\INC也找到了time.h这个头文件,里面与C标准库里的time.h内容差不多。
我可以在realview的工程里简单地包含这个文件来使用其提供的功能么?我没有找到time.h里声明的各个函数原型的相关的函数实现的文件,是包含在哪个函数库里了么?我需要专门包含这个函数库么?
再有,就是这个time.h的标准时间点(epoch)对应的日期和时间是什么?是通常的1970.1.1 00:00:00么?因为time.h里的日历时间(calendar time)是32为整型的,我想知道最多可以支持到哪一年?
再有就是time.h里的所有函数我都不需要自己实现么?我感觉至少clock_t clock(void)函数是需要我自己实现的。

相关帖子

沙发
beyondhyq| | 2011-12-9 22:52 | 只看该作者
楼主,其实time.h,你想用来做什么?是想把电脑的时间给嵌入式系统还是?

使用特权

评论回复
板凳
漂亮阿姨| | 2011-12-9 23:02 | 只看该作者
/**
* @brief        秒 <--> 日期时刻
*/
#ifdef        EN_TIME_SECS
#define        YEAR_FROM        2000
#define        YEAR_DIFF        2100
static        const uint DaysBeforeM[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
uint DateTimeToSeconds (const uint *dt)
{
        uint yy, mm, dd;

        yy = dt[0] - YEAR_FROM;
        dd = yy * 365 + ((yy + 3) >> 2);
        if(yy > (YEAR_DIFF - YEAR_FROM)) dd--;

        mm = dt[1];
        dd += DaysBeforeM[mm - 1];
        if((mm > 2) && ((yy & 3) == 0) && (yy != (YEAR_DIFF - YEAR_FROM))) dd++;

        dd += dt[2] - 1;

        return dd*86400 + dt[3]*3600 + dt[4]*60 + dt[5];
}
void SecondsToDateTime (uint secs, uint *dt)
{
        uint yy, mm, dd, tt;

        dt[5] = secs % 60;
        secs /= 60;
        dt[4] = secs % 60;
        secs /= 60;
        dt[3] = secs % 24;
        secs /= 24;

        yy = secs / 365;
        dd = secs % 365;
        tt = (yy + 3) >> 2;
        if(yy > (YEAR_DIFF - YEAR_FROM)) tt--;
        if(dd < tt){
                yy--;
                if(((yy & 3) == 0) && (yy != (YEAR_DIFF - YEAR_FROM))) dd++;
                dd += 365;
        }
        dd -= tt;

        mm = 0;
        while((mm < 12) && (dd >= DaysBeforeM[mm])) mm++;
        dd -= DaysBeforeM[mm-1];

        if((mm > 2) && ((yy & 3) == 0) && (yy != (YEAR_DIFF - YEAR_FROM))){
                if(dd == 0){
                        mm--;
                        dd = (mm == 2) ? 29 : DaysBeforeM[mm] - DaysBeforeM[mm-1];
                }
                dd--;
        }
        dd++;

        dt[0] = yy + YEAR_FROM;
        dt[1] = mm;
        dt[2] = dd;
}
#endif

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

63

帖子

0

粉丝