c语言time_t ,tm都是些什么类型

Python012

c语言time_t ,tm都是些什么类型,第1张

下面是粘贴的哈,将就着看,time_t ---long tm是结构体。

typedef __kernel_time_t time_t

typedef long__kernel_time_t

struct tm {

164 /*

165 * the number of seconds after the minute, normally in the range

166 * 0 to 59, but can be up to 60 to allow for leap seconds

167 */

168 int tm_sec

169 /* the number of minutes after the hour, in the range 0 to 59*/

170 int tm_min

171 /* the number of hours past midnight, in the range 0 to 23 */

172 int tm_hour

173 /* the day of the month, in the range 1 to 31 */

174 int tm_mday

175 /* the number of months since January, in the range 0 to 11 */

176 int tm_mon

177 /* the number of years since 1900 */

178 long tm_year

179 /* the number of days since Sunday, in the range 0 to 6 */

180 int tm_wday

181 /* the number of days since January 1, in the range 0 to 365 */

182 int tm_yday

183 }

time是C语言获取当前系统时间函数,以秒作单位,代表当前时间自Unix标准时间戳(1970年1月1日0点0分0秒,GMT)经过了多少秒。形式为time_ttime(time_t*t)该函数提供两种返回方式,返回值,和指针参数。可以根据需要选择。当参数t为空指针(NULL)时,只返回值。而NULL的定义是(void*)0,所以time(0)也就是time(NULL)的另一种写法,表示只通过返回值获取时间值。扩展资料:time函数函数名称:localtime函数原型:structtm*localtime(consttime_t*timer)函数功能:返回一个以tm结构表达的机器时间信息函数返回:以tm结构表达的时间,结构tm定义如下:#ifndef_TM_DEFINEDstructtm{inttm_sec/*秒–取值区间为[0,59]*/inttm_min/*分-取值区间为[0,59]*/inttm_hour/*时-取值区间为[0,23]*/inttm_mday/*一个月中的日期-取值区间为[1,31]*/inttm_mon/*月份(从一月开始,0代表一月)-取值区间为[0,11]*/inttm_year/*年份,其值等于实际年份减去1900*/inttm_wday/*星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推*/inttm_yday/*从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推*/inttm_isdst/* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/}#define_TM_DEFINED#endif参数说明:timer-使用time()函数获得的机器时间参考资料来源:百度百科-time.h

以前实际上用过,很想对C语言中的时间函数了解多一点,趁着这个寒假,查了些资料,大概把我现在能用到的关于时间的操作在此记录下来。通过几个函数来熟悉C语言中对时间的操作。(注:以下程序均在VS2010上编译通过。)①time()函数。可以通过time()函数来获得日历时间。其原型为:time_t time(time_t *timer)一般参数为空,返回值类型time_t是一个长整型数,函数将返回现在的日历时间,即从一个时间点(所有不同版本的Visual C++都是从1970年1月1日0时0分0秒)到现在的经过的秒数。例子程序:#include<stdio.h>#include<time.h>void main(){ time_t ltlt=time(NULL)printf("1970年1月1日0时0分0秒到现在经历了%ld秒%A",lt)}运行结果(结果与程序运行的时间有关,贴出我此时运行出的结果):1970年1月1日0时0分0秒到现在经历了1326975564秒请按任意键继续. . .②clock()函数。C语言中的计时函数。函数原型为:clock_t clock(void)clock()函数返回从“开启这个程序进程\”到“程序中调用clock()函数”时之间的CPU时钟计时单元数。返回值类型clock_t也是一个长整型数。在time.h头文件中定义了一个符号常量CLOCKS_PER_SEC,表示一秒钟会有多少个计时单元。所以通过简单的数学知识,可以知道在程序中用clock()/CLOCKS_PER_SEC来表示程序从开始到调用clock()函数时用了多少秒。例子程序:#include<stdio.h>#include<time.h>void main(){ clock_t ltfor(int i=0i<1000000000i++)lt=clock()printf("循环执行1000000000个空操作需要%f秒%A",(double)lt/CLOCKS_PER_SEC)}运行结果(在不同的机器上运行的结果可能不一样,下面是在我自己的笔记本上运行的结果):循环执行1000000000个空操作需要3.484000秒请按任意键继续. . .③使用C库函数来显示日期和时间。首先要介绍一下C语言中的一个日期的结构体类型,tm类型。其在time.h中的定义如下:#ifndef _TM_DEFINEDstruct 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 }#define _TM_DEFINED#endif然后可以介绍有关的函数了。time.h提供了两种不同的函数将日历时间(一个长整型数)转换成我们平时看到的把年月日时分秒分开的时间格式: struct tm *gmtime(const time_t *timer) struct tm *localtime(const time_t *timer)其中gmtime()函数是将日历时间转换为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转换为本地时间(在中国地区获得的本地时间会比世界标准时间晚8个小时)。例子程序:#include<stdio.h>#include<time.h>void main(){ struct tm *localtime_t tt=time(NULL)local=localtime(&t)printf("现在北京时间是%d点%A",local->tm_hour)local=gmtime(&t)printf("世界标准时间是%d点%A",local->tm_hour)}运行结果(运行结果与运行的时间有关,我是在早上9点多钟运行这个程序的):现在北京时间是9点世界标准时间是1点请按任意键继续. . .这样子我们就可以完全才输出此刻的年月日时分秒了,当然需要逐个来输出。其实C库函数还提供了一个很有用的以固定的时间格式来输出年月日时分秒的函数。这两个函数原型如下: char *asctime(const struct tm *timeptr) char *ctime(const time_t *timer)asctime()函数是通过tm结构来生成具有固定格式的保存时间信息的字符串,而ctime()是通过日历时间来生成时间字符串。这样下面的例子程序就容易理解了:#include<stdio.h>#include<time.h>void main(){ struct tm *localtime_t tt=time(NULL)local=localtime(&t)printf(asctime(local))local=gmtime(&t)printf(asctime(local))printf(ctime(&t))}运行结果(我是在早上9点多运行这个程序的):Fri Jan 20 09:55:56 2012Fri Jan 20 01:55:56 2012Fri Jan 20 09:55:56 2012请按任意键继续. . .C语言还可以以我们规定的各种形式来规定输出时间的格式。要用到时可以查阅相关的资料,限于篇幅,就介绍到这里。④这里介绍计算持续的时间长度的函数。之前已经介绍了使用clock()函数的例子,它可以精确到毫秒级。其实我们也可以使用difftime()函数,但它只精确到秒。该函数的定义如下: double difftime(time_t time1,time_t time0)例子程序:#include<stdio.h>#include<time.h>#include<stdlib.h>void main(){ time_t start,endstart=time(NULL)for(int i=0i<1000000000i++)end=time(NULL)printf("这个循-环用了%f秒%A",difftime(end,start))}运行结果:这个循环用了3.000000秒请按任意键继续. . .⑤最后介绍mktime()函数。原型如下: time_t mktime(struct tm *timer)可以使用函数将用tm结构表示的时间转换为日历时间。其返回值就是转换后的日历时间。这样我们就可以先制定一个分解时间,然后对这个时间进行操作。下面的例子用来计算2012年1月20日是星期几:#include<time.h>#include<stdio.h>#include<stdlib.h>int main(void){ struct tm ttime_t t_of_dayt.tm_year=2012-1900t.tm_mon=0t.tm_mday=20t.tm_hour=0t.tm_min=12t.tm_sec=1t.tm_isdst=1t_of_day=mktime(&t)printf(ctime(&t_of_day))return 0}运行结果:Fri Jan 20 00:12:01 2012请按任意键继续. . .