linux 时间函数


time ctime gmtime localtime asctime mktime

时间通过预定义的两种结构来存储:
1,日历时间(Calendar Time)是通过 time_t 数据类型来表示的,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数。在time.h中,我们也可以看到time_t是一个长整型数:
#ifndef _TIME_T_DEFINED
typedef long time_t; /* 时间值 */
#define _TIME_T_DEFINED /* 避免重复定义 time_t */
#endif

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

struct tm
{
int tm_sec; //代表目前秒数,正常范围为0-59,但允许至61秒
int tm_min; //代表目前分数,范围0-59
int tm_hour; //从午夜算起的时数,范围为0-23
int tm_mday; //目前月份的日数,范围01-31
int tm_mon; //代表目前月份,从一月算起,范围从0-11
int tm_year; //从1900 年算起至今的年数
int tm_wday; //一星期的日数,从星期一算起,范围为0-6
int tm_yday; //从今年1月1日算起至今的天数,范围为0-365
int tm_isdst; //日光节约时间的旗标
};

2009-9-20表示为tm结构体时,tm_year = 109,tm_mon = 8,tm_mday = 20,在直接使用tm成员值的时候需要注意。


time_t time( time_t *time);
函数说明: 函数返回当前时间,如果发生错误返回零。如果给定参数time ,那么当前时间存储到参数time中。
当前时间是从1970年 1月1日零时开始的秒数.

 
char *ctime(const time_t *timep);
函数说明  ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为“Thu Jan  7 23:19:29 2010\n”。若再调用相关的时间日期函数,此字符串可能会被破坏。
#include <time.h>
#include <stdio.h>
int main(void)
{
        time_t t;
        t = time(NULL);
        //time(&t);

        printf("%s \n",ctime(&t));
        return 0;
}
执行  Thu Jan  7 23:19:29 2010


struct tm*gmtime(const time_t*timep);
函数说明  gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。此函数返回的时间日期未经时区转换,而是UTC时间。
 
 
struct tm *localtime(const time_t * timep);
函数说明  localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。此函数返回的时间日期已经转换成当地时区。


char * asctime(const struct tm * timeptr);
函数说明  asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为:“Thu Jan  7 23:39:05 2010\n”。若再调用相关的时间日期函数,此字符串可能会被破坏。与函数ctime的区别是传入的参数不同。
#include <time.h>
#include <stdio.h>
int main(void)
{
        time_t t;
        //t = time(NULL);
        time(&t);

        printf("%s \n",asctime(localtime(&t)));
        //printf("%s \n",asctime(gmtime(&t)));
        return 0;
}
执行  Thu Jan  7 23:39:05 2010


time_t mktime(strcut tm * timeptr);
函数说明  mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。与 gmtime 功能相反。
#include <time.h>
#include <stdio.h>
int main(void)
{
        time_t t;
        struct tm *tmptr;

        t = time(NULL);
        //time(&t);
        printf("%ld \n",t);

        tmptr = localtime(&t);

        printf("%ld \n",mktime(tmptr));
        return 0;
}
执行
1262880019
1262880019


你可能感兴趣的:(linux 时间函数)