C语言中的时间

Python015

C语言中的时间,第1张

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

在C语言中计算时间,可以使用标准库中的计时函数——clock()。

函数原型:

clock_t clock( void )

其中clock_t是用来保存时间的数据类型,在time.h文件中,可以找到对它的定义:

#ifndef _CLOCK_T_DEFINED

typedef long clock_t

#define _CLOCK_T_DEFINED

#endif

很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

#define CLOCKS_PER_SEC ((clock_t)1000)

可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:

void elapsed_time()

{

printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC)

}

当然,也可以用clock函数来计算的机器运行一个循环或者处理其它事件到底花了多少时间:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main( void )

{

long    i = 10000000L

clock_t start, finish

double  duration

printf( "Time to do %ld empty loops is ", i )

start = clock()

while( i-- )      

finish = clock()

duration = (double)(finish - start) / CLOCKS_PER_SEC

printf( "%f seconds\n", duration )

system("pause")

}

#include<time.h>//C语言的头文件

#include<stdio.h>//C语言的I/O

voidmain()

{time_tnow//实例化time_t结构

structtm*timenow//实例化tm结构指针

time(&now)

//time函数读取现在的时间(国际标准时间非北京时间),然后传值给now

timenow=localtime(&now)

//localtime函数把从time取得的时间now换算成你电脑中的时间(就是你设置的地区)

printf("Localtimeis%s\n",asctime(timenow))

//上句中asctime函数把时间转换成字符,通过printf()函数输出

}

注释:time_t是一个在time.h中定义好的结构体。而tm结构体的原形如下:

structtm

{inttm_sec

inttm_min

inttm_hour

inttm_mday

inttm_mon

inttm_year

inttm_wday

inttm_yday

inttm_isdst

}