当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
计算机等级考试二级C语言中time函数5
发布时间:2010/9/15 15:49:40 来源:www.xue.net 编辑:城市总裁吧

  4.4 自定义时间格式

  我们可以使用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 简写的月份名

  %h 24小时制的小时

  %i 12小时制的小时

  %j 十进制表示的每年的第几天

  %m 十进制表示的月份

  %m 十时制表示的分钟数

  %n 新行符

  %p 本地的am或pm的等价显示

  %r 12小时的时间

  %r 显示小时和分钟:hh:mm

  %s 十进制的秒数

  %t 水平制表符

  %t 显示时分秒:hh:mm:ss

  %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)

  %u 第年的第几周,把星期日做为第一天(值从0到53)

  %v 每年的第几周,使用基于周的年

  %w 十进制表示的星期几(值从0到6,星期天为0)

  %w 每年的第几周,把星期一做为第一天(值从0到53)

  %x 标准的日期串

  %x 标准的时间串

  %y 不带世纪的十进制年份(值从0到99)

  %y 带世纪部分的十进制年份

  %z,%z 时区名称,如果不能得到时区名称则返回空字符。

  %% 百分号

  如果想显示现在是几点了,并以12小时制显示,就象下面这段程序:

  #include “time.h”

  #include “stdio.h”

  int main(void)

  {

  struct tm *ptr;

  time_t lt;

  char str[80];

  lt=time(nul);

  ptr=localtime(<);

  strftime(str,100,"it is now %i %p",ptr);

  printf(str);

  return 0;

  }

  其运行结果为:

  it is now 4pm

  而下面的程序则显示当前的完整日期:

  #include <stdio.h>

  #include <time.h>

  void main( void )

  {

  struct tm *newtime;

  char tmpbuf[128];

  time_t lt1;

  time( <1 );

  newtime=localtime(<1);

  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);

  其运行结果是一样的。

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved