Realview中使用time.h的问题
很多系统中的日期和时间是使用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)函数是需要我自己实现的。 楼主,其实time.h,你想用来做什么?是想把电脑的时间给嵌入式系统还是? /**
* @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 - YEAR_FROM;
dd = yy * 365 + ((yy + 3) >> 2);
if(yy > (YEAR_DIFF - YEAR_FROM)) dd--;
mm = dt;
dd += DaysBeforeM;
if((mm > 2) && ((yy & 3) == 0) && (yy != (YEAR_DIFF - YEAR_FROM))) dd++;
dd += dt - 1;
return dd*86400 + dt*3600 + dt*60 + dt;
}
void SecondsToDateTime (uint secs, uint *dt)
{
uint yy, mm, dd, tt;
dt = secs % 60;
secs /= 60;
dt = secs % 60;
secs /= 60;
dt = 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++;
dd -= DaysBeforeM;
if((mm > 2) && ((yy & 3) == 0) && (yy != (YEAR_DIFF - YEAR_FROM))){
if(dd == 0){
mm--;
dd = (mm == 2) ? 29 : DaysBeforeM - DaysBeforeM;
}
dd--;
}
dd++;
dt = yy + YEAR_FROM;
dt = mm;
dt = dd;
}
#endif
页:
[1]