时间通过预定义的两种结构来存储:
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(int argc, char *argv[])
- {
- 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(int argc, char *argv[])
- {
- time_t t;
- //t = time(NULL);
- time(&t);
- printf("%s \n", asctime(localtime(&t)));
- //printf("%s \n",asctime(gmtime(&t)));
- return 0;
- }
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(int argc, char *argv[])
- {
- 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