C/C++时间函数使用方法介绍(3)

本文介绍了C/C++中时间函数的应用,包括如何获取当前时间并格式化输出,计算持续时间,以及如何将分解时间转化为日历时间。通过具体实例展示了clock、difftime和mktime等函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C/C++时间函数使用方法介绍(3)
2007-12-14 17:22
#include <time.h> 

void main( void ) 
         struct tm *newtime; 
         char tmpbuf[128]; 
         time_t lt1; 
         time( &lt1 ); 
         newtime=localtime(&lt1); 
         strftime( tmpbuf, 128, "Today is %A, day %d of %B in the year %Y./n", newtime); 
         printf(tmpbuf); 

运行结果: 

Today is Saturday, day 30 of July in the year 2005. 

4.5 计算持续时间的长度 

         有时候在实际应用中要计算一个事件持续的时间长度,比如计算打字速度。在第1节计时部分中,我已经用clock函数举了一个例子。Clock()函数可以精确到毫秒级。同时,我们也可以使用difftime()函数,但它只能精确到秒。该函数的定义如下: 

double difftime(time_t time1, time_t time0); 

         虽然该函数返回的以秒计算的时间间隔是double类型的,但这并不说明该时间具有同double一样的精确度,这是由它的参数觉得的(time_t是以秒为单位计算的)。比如下面一段程序: 

#include "time.h" 
#include "stdio.h" 
#include "stdlib.h" 
int main(void) 
     time_t start,end; 
     start = time(NUL); 
     system("pause"); 
     end = time(NUL); 
     printf("The pause used %f seconds./n",difftime(end,start));//<- 
     system("pause"); 
     return 0; 

运行结果为: 
请按任意键继续. . . 
The pause used 2.000000 seconds. 
请按任意键继续. . . 

         可以想像,暂停的时间并不那么巧是整整2秒钟。其实,你将上面程序的带有“//<-”注释的一行用下面的一行代码替换: 

printf("The pause used %f seconds./n",end-start); 

其运行结果是一样的。 

4.6 分解时间转化为日历时间 

         这里说的分解时间就是以年、月、日、时、分、秒等分量保存的时间结构,在C/C++中是tm结构。我们可以使用mktime()函数将用tm结构表示的时间转化为日历时间。其函数原型如下: 

time_t mktime(struct tm * timeptr);

其返回值就是转化后的日历时间。这样我们就可以先制定一个分解时间,然后对这个时间进行操作了,下面的例子可以计算出1997年7月1日是星期几: 

#include "time.h" 
#include "stdio.h" 
#include "stdlib.h" 
int main(void) 
     struct tm t; 
     time_t t_of_day; 
     t.tm_year=1997-1900; 
     t.tm_mon=6; 
     t.tm_mday=1; 
     t.tm_hour=0; 
     t.tm_min=0; 
     t.tm_sec=1; 
     t.tm_isdst=0; 
     t_of_day=mktime(&t); 
     printf(ctime(&t_of_day)); 
     return 0; 

运行结果: 

Tue Jul 01 00:00:01 1997 

         现在注意了,有了mktime()函数,是不是我们可以操作现在之前的任何时间呢?你可以通过这种办法算出1945年8月15号是星期几吗?答案是否定的。因为这个时间在1970年1月1日之前,所以在大多数编译器中,这样的程序虽然可以编译通过,但运行时会异常终止。

摘自中国编程网
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值