欢迎来到天天文库
浏览记录
ID:22679658
大小:64.51 KB
页数:18页
时间:2018-10-30
《c语言时间函数应用》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言时间函数应用摘要:本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。关键字:UTC(世界标准时间),CalendarTime(日历时间),epoch(时间点),clocktick(时钟计时单元)1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的
2、操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法。通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:CoordinatedUniversalTime(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(GreenwichMeanTime,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。CalendarTime:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”
3、来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。epoch:时间点。时间点在标准C/C++中是一个整数,它用此时的时间和标准时间点相差的秒数(即日历时间)来表示。clocktick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的。一个clocktick不是CPU的一个时钟周期,而是C/C++的
4、一个基本计时单位。我们可以使用ANSI标准库中的time.h头文件。这个头文件中定义的时间和日期所使用的方法,无论是在结构定义,还是命名,都具有明显的C语言风格。下面,我将说明在C/C++中怎样使用日期的时间功能。头文件time.h中的函数:函数名函数用途clock得到处理器时间difftime得到时间差mktime设置时间time得到时间asctime得到以ASCII码表示的时间ctime得到字符串表示的时间strftime得到指定格式的时间2.计时C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对cl
5、ock函数定义如下:clock_tclock(void);这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clocktick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:#ifndef_CLOCK_T_DEFINEDtypedeflongclock_t;#define_CLOCK_T_DEFINED#endif很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_
6、SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:#defineCLOCKS_PER_SEC((clock_t)1000)可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:voidelapsed_time(){printf("Elapsedtime:%usecs.",clock()/CLOCKS_PER_SEC);}当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:#inclu
7、de“stdio.h”#include“stdlib.h”#include“time.h”intmain(void){longi=10000000L;clock_tstart,finish;doubleduration;/*测量一个事件持续的时间*/printf("Timetodo%ldemptyloopsis",i);start=clock();while(i--)finish=clock();duration=(double)(finish-start)/CLOCKS_PER_SEC;printf("%fseconds",duration);s
8、ystem("pause");}在笔者的机器上,运行结果如下:Timetodo10000000
此文档下载收益归作者所有