有关Linux时间函数的总结


首先搞清楚两个概念:

1、日历时间(Calendar Time)是通过time_t数据类型来表示的,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数。在time.h中,我们也可以看到time_t是一个长整型数。

2、在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:

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为正。www.bkjia.com 不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
        };

所以  现在详解以下几个函数:

1、asctime(将时间和日期以字符串格式表示)

char * asctime(const struct tm * timeptr):

函数说明
asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为:“Wed Jun 30 21:49:08 1993\n”

返回值
若再调用相关的时间日期函数,此字符串可能会被破坏。此函数与ctime不同处在于传入的参数是不同的结构。

2、char *ctime(const time_t *timep);
(将时间和日期以字符串格式表示):

函数说明:将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。

3、int gettimeofday(struct timeval * tv , struct timezone * tz ):

函数说明:gettimeofday()会把目前的时间有tv所指的结构返回,当地时区的信息则放到tz结构中。

timeval结构:


struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};

timezone结构:

struct timezone{
int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/
int tz_dsttime; /*日光节约时间的状态*/
};

4、struct tm*gmtime(const time_t*timep);

函数说明:

gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,www.bkjia.com 然后将结果由结构tm返回。

5、struct tm *localtime(const time_t * timep);

函数说明:将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。此函数返回的时间日期已经转换成当地时区。

6、mktime(将时间结构数据转换成经过的秒数)

time_t mktime(strcut tm * timeptr);


函数说明:mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。

7、settimeofday(设置目前时间)

int settimeofday ( const struct timeval *tv,const struct timezone *tz);


函数说明:settimeofday()会把目前时间设成由tv所指的结构信息,当地时区信息则设成tz所指的结构。详细的说明请参考gettimeofday()。注意,只有root权限才能使用此函数修改时间。

8、time(取得目前的时间)

time_t time(time_t *t);

函数说明此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t指针所指的内存。

相关内容