长期以来,UNIX系统一直使用两种不同的时间值:
(1)日历时间:该值是自1970年1月1日00:00:00以来国际标准时间(UTC)所经过的秒数累计值(UTC曾被称为格林尼治时间)。这些时间值可用于记录文件最后一次的修改时间等。
系统基本数据类型time_t用于保存这种时间值。
(2)进程时间:这也被称为CPU时间,用以度量进程使用的中央处理机资源。进程时间以时钟滴答计算,历史上曾经取每秒钟为50、60或100个滴答。
系统基本数据类型clock_t用于保存这种时间值。
当度量一个进程的执行时间时,UNIX系统使用三个进程时间值:
——时钟时间
——用户CPU时间
——系统CPU时间
时钟时间又称为墙上时钟时间。它是进程运行的时间总量,其值与系统中同时运行的进程数有关。
用户CPU时间是执行用户指令所用的时间。系统CPU时间是为该进程执行额你好程序所经历的时间。例如,每当一个进程执行一个系统服务时,例如read或write,则在内核内执行该服务所花费的时间久计入该进程的系统CPU时间。用户CPU时间和系统CPU时间之和常被称为CPU时间。
要取得任何一个进程的时钟时间、用户CPU时间和系统CPU时间是很容易的——只要时间time(1),其参数是要度量其执行时间的命令。
此链接有一个关于time命令的较为详细的用法:http://jafy00.blog.51cto.com/2594646/902478
时间和日期例程
由UNIX内核提供的基本时间服务是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数。这种秒数以数据类型time_t表示的,我们称之为日历时间。日历时间包括时间和日期。UNIX在这方面与其他操作系统的区别是:(1)以国际标准时间而非本地时间计时;(2)可自动进行转换,例如变换到夏时制;(3)将时间和日期作为一个量值保存。
time函数返回当前的时间和日期。
-
#include <time.h>
-
-
time_t time(time_t *calptr);
- 返回值:若成功则返回时间值,若出错则返回-1
与time函数相比,gettimeofday提供了更高的分辨率(最高为微秒级)。这对某些应用很重要。
-
#include <sys/time.h>
-
-
int gettimeofday(struct timeval *restrict tp, void *restrict tzp);
- 返回值:总是返回0
gettimeofday函数将当前时间存放在tp指向的timeval结构中,而该结构存储秒和微秒。
-
struct timeval
-
{
-
time_t tv_sev; //seconds
-
long tv_usec; //microseconds
- };

两个函数localtime和gmtime将日历时间转换为以年、月、日、时、分、秒、周日表示的时间,并将这些存放在一个tm结构中。

秒可以超过59的原因是可以表示闰秒。注意,除了月日字段外,其他字段的值都以0开始。如果夏时制生效,则夏时制标志值为正;如果非夏时制时间,则该标志值为0;如果此信息不可用,则其值为负数。
-
#include <time.h>
-
-
struct tm *gmtime(const time_t *calptr);
-
struct tm *localtime(const time_t *calptr);
-
- 两个函数返回值:执行tm结构的指针
函数mktime以本地时间的年月日等作为参数,将其转换成为time_t值。
-
#include <time.h>
-
-
time_t mktime(struct tm *tmptr);
-
- 返回值:若成功则返回日历时间,若出错则返回-1
-
#include <time.h>
-
-
char *asctime(const struct tm *tmptr);
-
char *ctime(const time_t calptr);
-
- 两个函数的返回值:指向以null结尾的字符串的指针
最后一个时间函数是strftime,它是非常复制的类似于printf的时间值函数。
-
#include <time.h>
-
-
size_t strftime(char *restrict buf, size_t maxsize, const char *restrict format, const struct tm *restrict tmptr);
- 返回值:若有空间则返回存入数组的字符数,否则返回0
引自:《UNIX高级环境编程》