unix内核的基本服务时间是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数,以时间类型time_t表示。以下根据时间的不同显示进行记录各种时间函数。
当前时间time
/* time函数. */ /*** * 函数功能:返回当前时间和日历。 * 返回值:若成功则返回时间值,若出错则返回-1。 * 函数原型: * **/ #include <time.h> time_t time(time_t *calptr); /* 说明: * 若参数calptr非空,则返回的时间值存储在calptr所指的单元内; * ***/上面time时间函数的返回值的日历时间,即是time_t类型的秒数,接下来是以普通显示的时间,就是我们平常接触的时间显示方式:年、月、日、时、分、秒。先看下这种时间显示结构信息:
/* tm structure. */ struct tm { int tm_sec; /* Seconds. [0-60] (1 leap second) */ int tm_min; /* Minutes. [0-59] */ int tm_hour; /* Hours. [0-23] */ int tm_mday; /* Day. [1-31] */ int tm_mon; /* Month. [0-11] */ int tm_year; /* Year - 1900. */ int tm_wday; /* Day of week. [0-6] */ int tm_yday; /* Days in year.[0-365] */ int tm_isdst; /* DST. [-1/0/1]*/ };将日历时间time_t转换为可读时间的函数分别是localtime和gmtime函数,这两个函数的区别是:localtime将日历时间转换为当地时间;gmtime将日历时间转换为国际标准时间;注:这里的可读时间是指我们一般使用的年月日时分秒;
/* 将日历时间转换为可读日期 */ /* localtime 和 gmtime 函数 */ /** * 函数功能:将时间秒转换为可读日期; * 返回值:返回指向tm结构的指针; * 函数原型: * Return the `struct tm' representation of *TIMER in Universal Coordinated Time (aka Greenwich Mean Time).*/ struct tm *gmtime (const time_t *timer); /* Return the `struct tm' representation of *TIMER in the local timezone. */ struct tm *localtime (const time_t *timer); /** * 区别:localtime返回的是当地时间;gmtime返回的是国际时间; * ***/mktime函数是将可读时间转换为日历时间time_t
/** 将可读时间转换为time_t时间 */ time_t mktime(struct tm *tmptr); /* 返回值:若成功则返回日历时间,若出错则返回-1 */以字符串显示时间的函数:asctime和ctime函数
/* 以字符串显示时间的函数 */ /** * 函数功能:以字符串显示的时间; * 返回值:指向以NULL结尾的字符串指针; * 函数原型: * */ /* Return a string of the form "Day Mon dd hh:mm:ss yyyy\n" that is the representation of TP in this format. */ char *asctime (const struct tm *tp); /* Equivalent to `asctime (localtime (timer))'. */ char *ctime (const time_t *timer);以格式化显示时间的函数
/* Format TP into buf according to FORMAT. Write no more than MAXSIZE characters and return the number of characters written, or 0 if it would exceed MAXSIZE. */ size_t strftime (char *restrict buf, size_t maxsize, const char *restrict format, const struct tm *restrict tp); /** * 说明: * 时间tp以格式format形式存放在大小为maxsize的缓冲数组buf中。 * 返回存在buf中字符数,不包括null字符; * **/测试程序:
#include <time.h> #include <stdio.h> #include "apue.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <utime.h> int main(void) { time_t T; char *ptr; struct tm *time1, *time2; T = time(NULL); printf("time_t format:%ld\n",T); time1 = localtime(&T); ptr = asctime(time1); printf("localtime format:%s\n",ptr); time2 = gmtime(&T); ptr = asctime(time2); printf("gmtime format:%s\n",ptr); ptr = ctime(&T); printf("ctime format:%s\n",ptr); T = mktime(time1); printf("mktime format:%ld\n",T); exit(0); }输出:
time_t format:1415101627 localtime format:Tue Nov 4 19:47:07 2014 gmtime format:Tue Nov 4 11:47:07 2014 ctime format:Tue Nov 4 19:47:07 2014 mktime format:1415101627
《unix高级环境编程》