没有合适的资源?快使用搜索试试~ 我知道了~
首页C++头文件time.h详解
资源详情
资源评论
资源推荐

头文件:<time.h>
函数用途 函数名 功能
得到处理器时间
clock
得到时间差
ditime
设置时间
mktime
将用 tm 结构表示的时间转化为日历时
间
得到时间
time
得到以 ASCII 码表示的时间
asctime
得到字符串表示的时间
ctime
得到指定格式的时间
strftime
摘要:,
本文从介绍基础概念入手,探讨了在 C/C++中对日期和时间操作所用到的数据结构和函数,
并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实
例向你展示了 time.h 头文件中声明的各种函数和数据结构的详细使用方法。,
关键字:,
UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时
钟计时单元),
1.概念,
在 C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许
多值得大家注意的地方。最近,在技术群中有很多网友也多次问到,过 C++语言中对时间的
操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在 C/C++中时间和
日期的使用方法.
通过学习许多 C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一
些“时间”和“日期”的概念,主要有以下几个:,

Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家
所熟知的格林威治标准时间,(Greenwich Mean Time,GMT)。比如,中国内地的时间
与 UTC 的时差为+8,也就是 UTC+8。美国是 UTC-5。,
Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的
时间。这个标准时间点对不同的编译器来说会有所不同,但,对一个编译系统来说,这个标
准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所
以可以说日历时间是“相对时间”,但是无论,你在哪一个时区,在同一时刻对同一个标准时
间点来说,日历时间都是一样的。,
epoch:时间点。时间点在标准 C/C++中是一个整数,它用此时的时间和标准时间点相差
的秒数(即日历时间)来表示。,
clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长
短是由 CPU 控制的。一个 clock tick 不是 CPU 的一个时钟周期,而是 C/C++的一个基本
计时单位。,
我们可以使用 ANSI 标准库中的 time.h 头文件。这个头文件中定义的时间和日期所使用的
方法,无论是在结构定义,还是命名,都具有明显的 C 语言风格。下面,我将说明在 C/
C++中怎样使用日期的时间功能。
2.,计时,
C/C++中的计时函数是 clock(),而与其相关的数据类型是 clock_t。
在 MSDN 中,查得对 clock 函数定义如下:,
clock_t clock( void );
这个函数返回从“开启这个程序进程”到“程序中调用 clock()函数”时之间的 CPU 时钟计时单
元(clock tick)数,在 MSDN 中称之为挂钟,时间(wal-clock)。其中 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");
}
在笔者的机器上,运行结果如下:,
Time to do 10000000 empty loops is 0.03000 seconds
上面我们看到时钟计时单元的长度为 1 毫秒,那么计时的精度也为 1 毫秒,那么我们可不
可以通过改变 CLOCKS_PER_SEC 的定义,通过把它定义的大一些,从而使计时精度更
高呢?通过尝试,你会发现这样是不行的。在标准 C/C++中,最小的计时单位是一毫秒。,
3.与日期和时间相关的数据结构,
在标准 C/C++中,我们可通过 tm 结构来获得日期和时间,tm 结构在 time.h 中的定义如下:
,
#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 秒,–,取值区间为[0,59] */
int tm_min; /* 分,- 取值区间为[0,59] */
int tm_hour; /* 时,- 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期,- 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0 代表一月),- 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去 1900 */
int tm_wday; /* 星期,–,取值区间为[0,6],其中 0 代表星期天,1 代表星期一,以此类推,*/
int tm_yday; /* 从每年的 1 月 1 日开始的天数,–,取值区间为[0,365],其中 0 代表 1 月 1 日,
1 代表 1 月 2 日,以此类推,*/
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst 为正。不实行夏令时的进候,
剩余10页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论12