linux下的常用时间函数总结
2013-03-07 01:55
573 查看
1、Unix系统一直使用两种不同的时间值:“日历时间”和“进程时间”
1.1、日历时间,日历时间是从国际标准时间公元1970年1月1日00:00:00到现在所经历的秒数;此时间精度为秒。
系统用time_t保存这种时间值,如果时间要求不是非常精确则可以使用此时间,例如记录文件修改的时间。
这里的time_t是个长整型数值,可以用函数:time_t time(time_t* calptr)获取此时间值,该函数会将时间值返回,同时如果参数不为空,时间值也会放在calptr所知向的单元内:
其使用方法如下面的小程序所示:
1.2、进程时间(或者CPU时间),该时间以时钟滴答计算,系统用clock_t保存这种时间值。
时钟滴答:里上上曾经取每秒钟为50、60或100个滴答,使用sysconf函数可以得到每秒钟的滴答数。
度量一个进程的执行时间时,Unix系统使用以下三个进程时间值:
* 时钟时间,该时间是进程运行的总时间,它跟当前系统中运行的进程数等有关系。
* 用户CPU时间,该时间为执行用户指令所使用的时间。
* 系统CPU时间,该时间为执行该进程的内核调用所花费的时间。
通常情况下:进程时间(或者CPU时间) = 用户CPU时间 + 系统CPU时间;
这里的clock_t也是个长整型数值。同时,在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元(上述每秒滴答数),其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
2、linux下高精度时间的获取,可以使用函数gettimeofday(),其最高精度为微妙,该函数的原型为:
[关键字restrict,只用于限定指针,用于告诉编译器这个指针所指向的内容,只有这个指针可以修改,详细解释请见:http://houjixin.blog.163.com/blog/static/3562841020132793039288/]
结构timval的的定义如下:
下面的程序使用该函数获取程序的执行时间:
3、函数localtime和gmtime可以将日历时间转换成年、月、日、时、分、秒等表示的时间,放在结构tm中,该结构体的定义如下所示:
函数localtime和gmtime的声明形式如下:
此两个函数的区别为localtime将日历时间转换为本地时间(考虑到本地时区和夏时制标志),而gmtime则将日历时间转换为国际标准时间的年、月、日、时、分、秒、周日
4、函数mktime可以将保存在tm对象中的本地时间转换为time_t格式,其函数声明如下:
5、函数asctime和ctime,产生用字符串保存的时间,类似与date命令的输出,例如:2013年 03月 07日 星期四 17:55:55 CST,这两个函数的声明如下:
函数asctime的参数时tm格式保存的时间指针,而ctime的参数时指向日历时间的指针。
本文参考《UNIX环境高级编程》
1.1、日历时间,日历时间是从国际标准时间公元1970年1月1日00:00:00到现在所经历的秒数;此时间精度为秒。
系统用time_t保存这种时间值,如果时间要求不是非常精确则可以使用此时间,例如记录文件修改的时间。
这里的time_t是个长整型数值,可以用函数:time_t time(time_t* calptr)获取此时间值,该函数会将时间值返回,同时如果参数不为空,时间值也会放在calptr所知向的单元内:
其使用方法如下面的小程序所示:
#include <time.h> #include <stdio.h> int main() { time_t curTime; curTime = time(NULL); printf("当前时间为:%ld\n",curTime); }
1.2、进程时间(或者CPU时间),该时间以时钟滴答计算,系统用clock_t保存这种时间值。
时钟滴答:里上上曾经取每秒钟为50、60或100个滴答,使用sysconf函数可以得到每秒钟的滴答数。
度量一个进程的执行时间时,Unix系统使用以下三个进程时间值:
* 时钟时间,该时间是进程运行的总时间,它跟当前系统中运行的进程数等有关系。
* 用户CPU时间,该时间为执行用户指令所使用的时间。
* 系统CPU时间,该时间为执行该进程的内核调用所花费的时间。
通常情况下:进程时间(或者CPU时间) = 用户CPU时间 + 系统CPU时间;
这里的clock_t也是个长整型数值。同时,在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元(上述每秒滴答数),其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
2、linux下高精度时间的获取,可以使用函数gettimeofday(),其最高精度为微妙,该函数的原型为:
#include<sys/time.h> int gettimeofday(struct timeval* restrict tp, void* restrict tzp);
[关键字restrict,只用于限定指针,用于告诉编译器这个指针所指向的内容,只有这个指针可以修改,详细解释请见:http://houjixin.blog.163.com/blog/static/3562841020132793039288/]
结构timval的的定义如下:
struct timeval { time_t tv_sec; /*seconds*/ long tv_usec; /* microseconds*/ };
下面的程序使用该函数获取程序的执行时间:
#include<stdio.h> #include<sys/time.h> #include<unistd.h> int delay(int time) { int i,j; for(i =0;i<time;i++) for(j=0;j<5000;j++) ; } int main() { struct timeval start; struct timeval end; unsigned long diff; gettimeofday(&start,NULL); delay(10); gettimeofday(&end,NULL); diff = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec; printf(“thedifference is %ld\n”,diff); return 0; }
3、函数localtime和gmtime可以将日历时间转换成年、月、日、时、分、秒等表示的时间,放在结构tm中,该结构体的定义如下所示:
#ifndef _TM_DEFINED 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代表一月) - 取值区间为[0,11] */ int tm_year; /* 年份,其值等于实际年份减去1900 */ int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */ int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */ int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/ }; #define _TM_DEFINED #endif
函数localtime和gmtime的声明形式如下:
#intclude <time.h> struct tm* gmtime(const time_t* calptr); struct tm* localtime(const time_t* calptr);
此两个函数的区别为localtime将日历时间转换为本地时间(考虑到本地时区和夏时制标志),而gmtime则将日历时间转换为国际标准时间的年、月、日、时、分、秒、周日
4、函数mktime可以将保存在tm对象中的本地时间转换为time_t格式,其函数声明如下:
#intclude <time.h> time_t mktime(struct tm* tmptr);
5、函数asctime和ctime,产生用字符串保存的时间,类似与date命令的输出,例如:2013年 03月 07日 星期四 17:55:55 CST,这两个函数的声明如下:
#intclude <time.h> char* asctime(const struct tm* tmptr); char* ctime(const time_t* calptr);
函数asctime的参数时tm格式保存的时间指针,而ctime的参数时指向日历时间的指针。
本文参考《UNIX环境高级编程》
相关文章推荐
- linux学习---常用时间函数
- linux常用的时间获取函数(time,gettimeofday,clock_gettime,_ftime,localtime,strftime )
- Linux socket 网络编程常用函数总结
- Linux的时间函数总结
- Linux 网络编程流程和常用函数总结!
- linux的常用时间函数
- linux 延时及时间函数总结
- linux/unix下常用时间函数
- linux下常用的几个时间函数:time,gettimeofday,clock_gettime,_ftime
- web报表工具FineReport常用函数的用法总结(日期和时间函数)
- linux时间函数总结
- Linux常用命令学习总结 - 日期时间安排类命令(3)
- php 常用函数总结(数组,字符串,时间,文件操作)
- Linux 常用时间统计函数
- Linux下面time.h时间函数总结
- web报表工具FineReport常用函数的用法总结(日期和时间函数)
- linux时间编程常用函数
- Linux时间时区详解与常用时间函数
- web报表工具FineReport常用函数的用法总结(日期和时间函数)
- 总结四:Linux与时间相关的常用命令