3)将时间与日期作为一个量值保存
time函数
time函数返回当前时间和日期。#include
time_t time(time_t *calptr);
//返回值:若成功,返回时间值;若出错,返回-1
时间值作为函数值返回。如果参数非空,则时间值也存放在由calptr指向的单元内。
标识符
|
选项
|
说明
|
CLOCK_REALTIME
|
实时系统时间
|
|
CLOCK_MOMOTONIC
|
_POSIX_MONOTONIC_CLOCK
|
不带负跳数的实时系统时间
|
CLOCK_PROCESS_CPUTIME_ID
|
_POSIX_CPUTIME
|
调用进程的CPU时间
|
CLOCK_THREAD_CPUTIME_ID
|
_POSIX_THREAD_CPUTIME
|
调用线程的CPU时间
|
#include
int clock_gettime(clockid_t clock_id, struct timespce *tsp);
//返回值:若成功返回0;若出错,返回-1
当时钟ID设置为CLOCK_REALTIME时,clock_gettime函数提供了与time函数类似的功能,不过在系统支持高精度时间值的情况下,clock_gettime可能比time函数得到更高精度的时间值。
#include
int clock_getres(clockid_t clock_id, struct timespec *tsp);
//返回值:若成功,返回0;若出错,返回-1
clock_getres 函数把参数tsp指向的timespec结构初始化为与clock_id参数对应的时钟精度。例如,如果精度为1毫秒,则tv_sec字段就是0,tv_nsec字段就是1 000000。
int clock_settime(clockid_t clock_id, const struct timespec *tsp);
//返回值:若成功,返回0;若出错,返回-1
gettimeofday函数
gettimeofday函数与time函数相比,gettimeofday提供了更高的精度(可到微妙级)。
#include
int gettimeofday(struct timeval *restrict tp, void *restrict tzp);
//返回值:总是返回0
tzp的唯一合法值是NULL,其他值将产生不确定结果。struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
localtime和gmtime函数
#include
struct tm *gmtime(const time_t *calptr);
struct tm *localtime(const time_t *calptr)
//两个函数的返回值:指向分解的tm结构的指针:若出错,返回NULL
localtime 和 gmtime之间的区别是:localtime将日历时间转换成本地时间,而gmtime则将日历时间转换成协调同一时间的年、月、日、时、分、秒、周日分解结构。
#include
time_t mktime(struct tm *tmptr);
//返回值:若成功,返回日历时间;若出错,返回-1
strftime函数
#include
size_t strftime(char *restrict buf,size_t maxsize,const char *restrict format,const struct tm *restrict tmptr);
size_t strftime_l(char *restrict buf,size_t maxsize,const char *restrict format,const struct tm *restrict tmptr, locale_t locale);
strftime_l允许调用者将区域指定为参数,除此之外,strftime和strftime_l 函数是相同的。strftime使用通过TZ环境变量指定的区域。#include
#include
#include
int main()
{
time_t t;
struct tm *tmp;
char buf1[16];
char buf2[64];
time(&t);
tmp=localtime(&t);
if (strftime(buf1,16,"time and date:%r,%a %b %d, %Y", tmp) == 0)
printf("buffer length 16 is too small \n");
else
printf("%s\n",buf1);
if (strftime(buf2,64,"time and date:%r,%a %b %d, %Y", tmp) == 0)
printf("buffer length 64 is too small \n");
else
printf("%s\n",buf2);
exit(0);
}