时钟周期(clock cycle)
晶体振荡器在1秒时间内产生的时钟脉冲个数就是时钟周期的频率,宏为 CLOCK_TICK_RATE(=1193180HZ)
时钟滴答(clock tick)
当PIT通道0的计数器减到0值时,它就在IRQ0上产生一次时钟中断,也即一次时钟滴答。1秒时间内PIT所产生的时钟滴答次数叫时钟滴答的频率。
time.h
四个变量类型
size_t 无符号整数类型,它是 sizeof 关键字的结果。
clock_t clock()函数的返回值,unsigned long,clock返回的是时钟中断数,除以CLOCKS_PER_SEC(1000)就是进程运行秒数。
time_t 存储日历时间类型,time()函数的返回值,从1970/01/01/00:00:00开始到现在的秒数。它的本质也是一个长整形。
struct tm 用来保存时间和日期的结构。注意中国时区为UTC-8,手动转换为北京时间时要加8h,用localtime函数计算本地时间会自动转换,不需要加8小时。
struct tm
{
int tm_sec; /* 秒,范围从 0 到 59 */
int tm_min; /* 分,范围从 0 到 59 */
int tm_hour; /* 小时,范围从 0 到 23 */
int tm_mday; /* 一月中的第几天,范围从 1 到 31 */
int tm_wday; /* 一周中的第几天,范围从 0 到 6 */
int tm_yday; /* 一年中的第几天,范围从 0 到 365 */
int tm_mon; /* 月,范围从 0 到 11(注意) */
int tm_year; /* 自 1900 年起的年数 */
int tm_isdst; /* 夏令时 */
};
几个函数
clock_t clock(void);
这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。
clock_t是用来保存时间的长整形数据类型。
还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个clock tick,一般取值为1000。
核心代码:
double TheTimes;
printf("做%ld次空循环需要的时间为",i);
start=clock();
while(/*判断条件*/)
/*循环内容*/;
finish=clock();
TheTimes=(double)((finish-start)/CLOCKS_PER_SEC);
time_t time(time_t * timer) //这个函数如果读取失败返回-1,但是编译器可能定义time_t为无符号型,所以进行错误检查时,用if(timer==(time_t)-1)进行判断!
该函数返回值是1970年至今的秒数,形参参数timer可以是NULL,也可以是一个传出参数,它的值和返回值相等。
核心代码:
time_t t1,t2; //分别声明两种使用方式的赋值对象
t1=time(0); //第一种使用方式
time(&t2); //第二种使用方式
printf("t1=%ld\n",t1);
printf("t2=%ld",t2);
执行结果:
t1=1531208713
t2=1531208713
localtime函数,gmtime函数,asctime函数,ctime函数
struct tm * localtime(const time_t *timer) //使用timer的值来填充tm结构,并用本地时区表示。
struct tm * gmtime(time_t *timer) //使用timer的值来填充tm结构,并用格林威治标准时间表示。
char* asctime(struct tm * ptr) // 将结构tm转换为字符串,字符串的格式为:星期,月,日,小时:分:秒,年
char * ctime(const time_t * timer) //等价于astime( localtime(timer)
#include <stdio.h>
#include <time.h>
/**********localtime()+asctime()组合***********/
int main ()
{
time_t timer;
struct tm *Now;
time( &timer ); //获取当前秒数
Now = localtime( &timer ); //将当前秒数格式化为tm格式
printf("当前的本地时间和日期:%s", asctime(Now)); //以字符串的形式输出当前时间
return(0);
}
/***************ctime()单干*****************/
int main ()
{
time_t curtime;
time(&curtime);
printf("当前时间 = %s", ctime(&curtime));
return(0);
}