Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1759353
  • 博文数量: 290
  • 博客积分: 10653
  • 博客等级: 上将
  • 技术积分: 3178
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 23:08
文章存档

2013年(6)

2012年(15)

2011年(25)

2010年(86)

2009年(52)

2008年(66)

2007年(40)

分类: C/C++

2009-04-28 15:51:07

一、MFC类

MFC提供了两个日期和时间类CTime和CTimeSpan,分别代表相对时间和绝对时间。CTime是基于格林威治平均时间(GMT)的,本地的时间由环境变量TZ决定。CTimeSpan代表了时间间隔。

CTime类由下列成员函数

CTime()

创建一个CTime对象。

GetCurrentTime()

由当前时间创建一个CTime对象。

GetTime()

由CTime对象返回一个time_t变量。

GetYear()

获取CTime对象代表的年。

GetMonth()

获取CTime对象代表的月。

GetDay() 获取CTime对象代表的日期。

GetHour() 获取CTime对象代表的小时。

GetMinute()获取CTime对象代表的分。

GetSecond() 获取CTime对象代表的秒。

GetDayOfWeek() 获取CTime对象代表的周日,1代表周日,2代表周-等等。

Format() 将字符串转换成一个基于本地时区的格式字符串。

FormatGmt() 将字符串转换成一个基于UTC(世界时)的格式字符串。

operator = 赋予新的时间

operator + 增加CTime和CTimeSpan对象。

operator – 减小CTime和CTimeSpan对象。

operator += CTime对象加一个CTimeSpan对象。

operator -= CTime对象减一个CTimeSpan对象。

operator == 比较两个绝对时间是否相等。

operator != 比较两个绝对时间是否不相等。

operator < 比较两个绝对时间,是否前一个大于后一个。

operator > 比较两个绝对时间,是否前一个小于后一个。

operator >= 比较两个绝对时间,是否前一个大于等于后一个。

operator <= 比较两个绝对时间,是否前一个小于等于后一个
 
二、总结
 
首先看几个函数的原型的声明(在time.h中):

      clock_t clock( void )      clock_t是用来保存时间的数据类型,是long型

      double difftime(time_t time1, time_t time0);   取时间间隔的函数

      time_t time(time_t * timer);   日历时间函数

      char * asctime(const struct tm * timeptr);   将tm 类的时间结构转化为 固定时间格式

      char * ctime(const time_t *timer); 将日历时间转化为 固定时间格式

      time_t mktime(struct tm * timeptr);   以年、月、日、时、分、秒等分量保存的时间结构

      struct tm * gmtime(const time_t *timer);   将日历时间转化为格林尼治时间
                                        
      struct tm * localtime(const time_t * timer); 将日历时间转化为当地时间

      tm 的定义:
                 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为正。不实行夏令时的进候

                       ,tm_isdst为0;不了解情况时,tm_isdst()为负。*/}


   1.获取间隔时间
         1.   clock_t start, finish;
             long     i = 10000000;
             double   duration;
             start = clock();
             while( i-- ) ;
             finish = clock();
             duration = (double)(finish - start) / CLOCKS_PER_SEC;
             cout<             输出的是: i从10000000减到零用的时间,精确到毫秒
          2.
             double pause1;
             time_t start,end;
             start = time(NULL);
             system("pause");
             end = time(NULL);
             pause1 =difftime(end,start);
             cout<             输出的是: 你停顿(pause)的时间,精确到秒
  
   2.获得日历时间
             time_t lt;
             lt =time(NULL);//(还不清楚带参的和不带参的区别)
             cout<             输出的是: 从1970年1月1日0时0分0秒到此时的秒数
  
  
   3.获得日期和时间

         1. 将日历时间转化为本地时间(格林尼治时间)
           struct tm *local
           time_t t;
           t=time(NULL);
           local=localtime(&t);
           //local=gmtime(&t);
           cout<tm_hour;
         2. 以固定的时间格式获得日期和时间:看清这两个函数的参和返回值的类型
                                       char * asctime(const struct tm * timeptr);
                                       char * ctime(const time_t *timer);

               1.将日历时间直接转换为 固定的时间格式的日期和时间

                   char * jieguo;
                   time_t lt;
                   lt =time(NULL);
                   jieguo =ctime(<);
                   cout<< jieguo;

               2.将日历时间经过localtime()和gmtime()转换后在转换为固定的时间格式的日期和时间
                   struct tm *local;
                   char * jieguo;
                   time_t t;
                   t =time(NULL);
                   local=localtime(&t);
                   //local=gmtime(&t);
                   jieguo=asctime(local);
                   cout<< jieguo;

4.分解时间转化为日历时间

这里说的分解时间就是以年、月、日、时、分、秒等分量保存的时间结构,在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日之前,所以在大多数编译器

中,这样的程序虽然可以编译通过,但运行时会异常终止。
  
   5.还知道了一个system()函数,是执行DOS命令的,system("某DOS命令");头文件是stdlib.h?windows.h

阅读(1566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~