头文件time.h
@函数名称: localtime
函数原型: struct tm *localtime(const time_t *timer)
函数功能: 返回一个以tm结构表达的机器时间信息
函数返回: 以tm结构表达的时间,结构tm定义如下:
struct 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;
};
参数说明: timer-使用time()函数获得的机器时间
#include time.h
#include stdio.h
#include dos.h
int main()
{
time_t timer;
struct tm *tblock;
timer=time(NULL);
tblock=localtime(timer);
printf("Local time is: %s",asctime(tblock));
return 0;
}
@函数名称: asctime
函数原型: char* asctime(struct tm * ptr)
函数功能: 得到机器时间(日期时间转换为ASCII码)
函数返回: 返回的时间字符串格式为:星期,月,日,小时:分:秒,年
参数说明: 结构指针ptr应通过函数localtime()和gmtime()得到
所属文件: time.h
#include string.h
struct tm t;
t.tm_sec=1;
t.tm_mon=11;
t.tm_yday=0;
t.tm_isdst=0;
strcpy(str,asctime(t));
printf("%s",str);
@函数名称: ctime
函数原型: char *ctime(long time)
函数功能: 得到日历时间
函数返回: 返回字符串格式:星期,月,日,小时:分:秒,年
参数说明: time-该参数应由函数time获得
time_t t;
time(t);
printf("Today's date and time: %s",ctime(t));
@函数名称: difftime
函数功能: 得到两次机器时间差,单位为秒
函数返回: 时间差,单位为秒
#include conio.h
time_t first, second;
clrscr();
first=time(NULL);
second=time(NULL);
printf("The difference is: %f seconds",difftime(second,first));
getch();
@函数名称: gmtime
函数原型: struct tm *gmtime(time_t *time)
函数功能: 得到以结构tm表示的时间信息
函数返回: 以结构tm表示的时间信息指针
参数说明: time-用函数time()得到的时间信息
#include stdlib.h
struct tm *gmt, *area;
putenv(tzstr);
tzset();
t=time(NULL);
area=localtime(t);
printf("Local time is:%s", asctime(area));
gmt=gmtime(t);
printf("GMT is:%s", asctime(gmt));
@函数名称: time
函数原型: time_t time(time_t *timer)
函数功能: 得到机器的日历时间或者设置日历时间
函数返回: 机器日历时间
参数说明: timer=NULL时得到机器日历时间,timer=时间数值时,用于设置日历时间,time_t是一个long类型
t=time();
@函数名称: tzset
函数原型: void tzset(void)
函数功能: UNIX兼容函数,用于得到时区,在DOS环境下无用途
函数返回:
参数说明:
time_t td;
time(td);
printf("Current time=%s",asctime(localtime(td)));
c语言时间函数:
①.、获得日历时间函数:
可以通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer);
其中可以使用的函数是gmtime()和localtime(),这两个函数的原型为:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
int main(void)
timer = time(NULL);
tblock = localtime(timer);
printf("Local time is: %s", asctime(tblock));
tm结构定义如下:
struct tm
一.概念
在C/C++中,通过学习许多C/C++库,你可以有很多操作、使用时间的方法.但在这之前你需要了解一些"时间"和"日期"的概念,主要有以下几个:
我们可以使用ANSI标准库中的time.h头文件.这个头文件中定义的时间和日期所使用的方法,无论是在结构定义,还是命名,都具有明显的C语言风格.下面,我将说明在C/C++中怎样使用日期的时间功能.
二. 介绍
① 计时
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. ",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 ", duration );
system("pause");
在笔者的机器上,运行结果如下:
上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变CLOCKS_PER_SEC的定义,通过把它定义的大一些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的.在标准C/C++中,最小的计时单位是一毫秒.
在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:
#ifndef _TM_DEFINED
struct tm {
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正.不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负.*/
#define _TM_DEFINED
ANSI C标准称使用tm结构的这种时间表示为分解时间(broken-down time).
#ifndef _TIME_T_DEFINED
typedef long time_t; /* 时间值 */
#define _TIME_T_DEFINED /* 避免重复定义 time_t */
在time.h头文件中,我们还可以看到一些函数,它们都是以time_t为参数类型或返回值类型的函数:
double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);
time_t time(time_t * timer);
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
此外,time.h还提供了两种不同的函数将日历时间(一个用time_t表示的整数)转换为我们平时看到的把年月日时分秒分开显示的时间格式tm:
在本节,我将向大家展示怎样利用time.h中声明的函数对时间进行操作.这些操作包括取当前时间、计算时间间隔、以不同的形式显示时间等内容.
我们可以通过time()函数来获得日历时间(Calendar Time),其原型为:
运行的结果与当时的时间有关,我当时运行的'结果是:
/* Author: Eman Lee */
time_t lt;
lt =time(NULL);
printf("The Calendar Time now is %d ",lt);
//本地时间,世界标准时间
struct tm *local;
local=localtime(t);
printf("Local hour is: %d:%d:%d ",local-tm_hour,local-tm_min,local-tm_sec);
local=gmtime(t);
printf("UTC hour is: %d:%d:%d ",local-tm_hour,local-tm_min,local-tm_sec);
运行结果是:
我们可以通过asctime()函数和ctime()函数将时间以固定的格式显示出来,两者的返回值都是char*型的字符串.返回的时间格式为:
星期几 月份 日期 时:分:秒 年
其中 是一个换行符,是一个空字符,表示字符串结束.下面是两个函数的原型:
其中asctime()函数是通过tm结构来生成具有固定格式的保存时间信息的字符串,而ctime()是通过日历时间来生成时间字符串.这样的话,asctime()函数只是把tm结构对象中的各个域填到时间字符串的相应位置就行了,而ctime()函数需要先参照本地的时间设置,把日历时间转化为本地时间,然后再生成格式化后的字符串.在下面,如果t是一个非空的time_t变量的话,那么:
printf(ctime(t));
等价于:
struct tm *ptr;
ptr=localtime(t);
printf(asctime(ptr));
那么,下面这个程序的两条printf语句输出的结果就是不同的了(除非你将本地时区设为世界标准时间所在的时区):
ptr=gmtime();
printf(ctime());
运行结果:
我们可以使用strftime()函数将时间格式化为我们想要的格式.它的原型如下:
size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);
我们可以根据format指向字符串中格式命令把timeptr中保存的时间信息放在strDest指向的字符串中,最多向strDest中存放maxsize个字符.该函数返回向strDest指向的字符串中放置的字符数.
函数strftime()的操作有些类似于sprintf():识别以百分号(%)开始的格式命令集合,格式化输出结果放在一个字符串中.格式化命令说明串strDest中各种日期和时间信息的确切表示方法.格式串中的其他字符原样放进串中.格式命令列在下面,它们是区分大小写的.
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%V 每年的第几周,使用基于周的年
%x 标准的日期串
%X 标准的时间串
%Y 带世纪部分的十进制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符.
%% 百分号
time_t localTime;
localTime=time(NULL);
ptr=localtime(localTime);
strftime(str,100,"It is now %I %p ",ptr);
printf(str);
其运行结果为:
而下面的程序则显示当前的完整日期:
//显示当前的完整日期
void main( void )
struct tm *newtime;
time_t localTime1;
time( localTime1 );
newtime=localtime(localTime1);
printf(tmpbuf);
有时候在实际应用中要计算一个事件持续的时间长度,比如计算打字速度.在第1节计时部分中,我已经用clock函数举了一个例子.Clock()函数可以精确到毫秒级.同时,我们也可以使用difftime()函数,但它只能精确到秒.该函数的定义如下:
虽然该函数返回的以秒计算的时间间隔是double类型的,但这并不说明该时间具有同double一样的精确度,这是由它的参数觉得的(time_t是以秒为单位计算的).比如下面一段程序:
//计算持续时间的长度
time_t start,end;
start = time(NULL);
end = time(NULL);
printf("The pause used %f seconds. ",difftime(end,start));//-
运行结果为:
请按任意键继续. . .
printf("The pause used %f seconds. ",end-start);
其运行结果是一样的.
这里说的分解时间就是以年、月、日、时、分、秒等分量保存的时间结构,在C/C++中是tm结构.我们可以使用mktime()函数将用tm结构表示的时间转化为日历时间.其函数原型如下:
struct tm time;
time_t t_of_day;
time.tm_mday=1;
time.tm_hour=0;
time.tm_min=0;
time.tm_sec=1;
time.tm_isdst=0;
t_of_day=mktime(time);
printf(ctime(t_of_day));
time_t t; /*定义一个time_t型(在time.h中有typedef long time_t;语句,由此可知,time_t类型也就是long类型)的变量*/
printf("%s/n", ctime(t)); /*ctime(t)将把t所指向的日历时间转换为系统所提供的一个字符串,这个函数将返回这个字符串的基址,然后由printf语句将这个字符串输出,从而得到现在的时刻*/
①.、time_t // 时间类型(time.h 定义)?
struct tm { // 时间结构,time.h 定义如下:?
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;?
}?
localtime ( rawtime ); //转为当地时间,tm 时间结构?
asctime() // 转为标准ASCII时间格式:?
#include?stdio.h?
#include?time.h?
int?main()
{?
time_t?rawtime;?
struct?tm?*?timeinfo;?
time?(?rawtime?);?
timeinfo?=?localtime?(?rawtime?);?
printf?(?"The?current?date/time?is:?%s",?asctime?(timeinfo)?);?
return?0;
以上就是土嘎嘎小编为大家整理的c语言使用时间函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!