MFC常用类--CTime类

转载地址:http://blog.csdn.net/piaoxue820/article/details/6219079

CTime类

1.构造和初始化CTime类对象

CTime类有下列构造函数:

CTime( );

CTime( const CTime& timeSrc );

CTime( time_t time );

CTime( int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1 );

CTime( WORD wDosDate, WORD wDosTime, int nDST = -1 );

CTime( const SYSTEMTIME& sysTime, int nDST = -1 );

CTime( const FILETIME& fileTime, int nDST = -1 );

说明:以不同的方式构造一个CTime对象。可以用一个已经存在的CTime对象或一个time_t(在time.h中被定义为long)类型变量来构造和初始化CTime对象,也可以用年、月、日、小时、分、秒来构造和初始化CTime对象,还可以用SYSTEMTIME、FILETIME结构来构造和初始化CTime对象。SYSTEMTIME、FILETIME结构定义如下:

typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} SYSTEMTIME;

 

typedef struct _FILETIME {
    DWORD dwLowDateTime;   /* low 32 bits  */
    DWORD dwHighDateTime;  /* high 32 bits */
} FILETIME, *PFILETIME, *LPFILETIME;

 

2.时间值的提取函数

(1)GetCurrentTime()   获取系统当前时间。

原型:static CTime PASCAL GetCurrentTime( );

(2)GetTime()  由CTime对象返回一个time_t变量。

原型:time_t GetTime( ) const;

(3)GetYear()   获取CTime对象代表的年。

原型:int GetYear( ) const;

以下(4)至(9)函数原型与GetYear()类似。

(4)GetMonth()获取CTime对象代表的月。

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

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

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

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

(9)GetDayOfWeek() 获取CTime对象代表的星期几,1代表周日、2代表周一、等等。

3.格式化时间

成员函数Format() 将CTime对象中的时间信息转化为一个格式化的字符串。其函数原型为:

CString Format( LPCTSTR pFormat ) const;

CString Format( UINT nFormatID ) const;

参数pFormat是格式字符串,类似于printf中的格式字符串,格式字符如下:

%a:周的英文缩写形式;

%A:周的英文全名形式;

%b: 月的英文缩写形式;

%B:月的英文全名形式;

%c: 完整的日期和时间;

%d:十进制形式的日期(01-31);

%H:24小时制的小时(00-23);

%I: 12小时制的小时(00-11);

%j: 十进制表示的一年中的第几天(001-366);

%m: 月的十进制表示(01-12);

%M:十进制表示的分钟(00-59);

%p: 12小时制的上下午标示(AM/PM);

%S: 十进制表示的秒(00-59);

%U: 一年中的第几个星期(00-51),星期日是一周的第一天;

%W: 一年中的第几个星期(00-51),星期一是一周的第一天;

%w: 十进制表示的星期几(0-6);

%Y: 十进制表示的年;

参数nFormatID 是格式字符串资源的ID号。

4.重载运算符

operator = :  赋予新的时间。

operator + :  增加CTime和CTimeSpan对象。

operator – :  减小CTime和CTimeSpan对象。

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

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

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

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

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

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

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

operator <=  : 比较两个绝对时间,是否前一个小于等于后一个。

例子代码

例1:获取当前时间

       CTime m_time=CTime::GetCurrentTime();

       CString s=m_time.Format("%A,%B,%d,%Y");

       CString m_strTime="当前时间是:"+s;

       MessageBox(m_strTime);

运行结果在信息框中显示“当前时间是:Sunday,February,4,2001”,程序第一行获取系统当前时间,并赋给m_time。第二行从m_time创建一个字符串对象,将该字符串赋给变量s,格式%A为周的英文全名形式,%B为月的英文全名形式,%d为十进制形式的日期(01-31),%Y为 十进制表示的年。

例2:由年、月、日得到对应的周日。

       CTime m_time(2001,2,5,12,0,0);

       int weekday=m_time.GetDayOfWeek();

       switch(weekday)

       {

              case 1:

                     MessageBox("今天是周日");

                     break;

              case 2:

                     MessageBox("今天是周一");

                     break;

              case 3:

                     MessageBox("今天是周二");

                     break;

              case 4:

                     MessageBox("今天是周三");

                     break;

              case 5:

                     MessageBox("今天是周四");

                     break;

              case 6:

                     MessageBox("今天是周五");

                     break;

              case 7:

                     MessageBox("今天是周六");

                     break;

              default:

                     break;

       }

运行结果在信息框中显示“今天是周一”,m_time.GetDayOfWeek()获取m_time代表的周几(1代表周日,2代表周一等等)。



MFC编程中CTime各种格式转换


 (一)获得当前日期和时间,并可以转化为 CString

CTime tm=CTime::GetCurrentTime();

 CString str=tm.Format("%Y-%m-%d");

或者

SYSTEMTIME systemTime;

::GetLocalTime(&systemTime);

CTime cTimeNow(systemTime);

// 还有一个GetSystemTime();

在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:

CTime t = CTime::GetCurrentTime(); //获取系统日期

int d=t.GetDay(); //获得几号

int y=t.GetYear(); //获取年份

int m=t.GetMonth(); //获取当前月份

int h=t.GetHour(); //获取当前为几时

int mm=t.GetMinute(); //获取分钟

int s=t.GetSecond(); //获取秒

int w=t.GetDayOfWeek(); //获取星期几,注意1为星期天,7为星期六

如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:

CTime t1( 1999, 3, 19, 22, 15, 0 );

CTime t = CTime::GetCurrentTime(); 

CTimeSpan span=t-t1; //计算当前系统时间与时间t1的间隔

int iDay=span.GetDays(); //获取这段时间间隔共有多少天

int iHour=span.GetTotalHours(); //获取总共有多少小时

int iMin=span.GetTotalMinutes();//获取总共有多少分钟

int iSec=span.GetTotalSeconds();//获取总共有多少秒

(二)CString转化为CTime

//转化为CTime

CString strTime="2008-7-2  21:59:11";

COleVariant vtime(strTime);

vtime.ChangeType(VT_DATE);

COleDateTime cOleTime=vtime;

SYSTEMTIME systime;

VariantTimeToSystemTime(cOleTime, &systime);

CTime cTimeFromDB(systime);

(三)CTime 与COleDateTime

CTime是无符号long型,范围0-4 2 9 4 9 6 7 2 9 5. 代表从1970年1月1日之后经过的秒数,所以到了2 0 3 7年它将达到4 2 9 4 9 6 7 2 9 5,从而不能再使用。

COleDateTime是double类型,占64位。代表从1 9 0 0年1 2月3 0号之后的天数(小时是天的小数部分),几千年之内不会溢出.

CTime COleDateTime相互转换:

//COleDataTime—>CTime

COleDateTime cOleTime(1977,4,16,2,2,2);

SYSTEMTIME systime;

VariantTimeToSystemTime(cOleTime, &systime);

CTime cTime(systime);

//CTime—>time_t

time_t tt=cTime.GetTime();

//time_t—>COleDateTime

COleDateTime cOleTime(tt);

CTime _Variant_t相互转换

SYSTEMTIME systime

CTime cTime(2007,5,7,0,0,0);

cTime.GetAsSystemTime(systime);//转成systime

double dtime;

SystemTimeToVariantTime(&systime,&dtime);

_variant_t var_time(dtime,VT_DATE);//var_time就是转换结果

补:

GetSystemTime:所返回的是UTC.

协调世界时(Coordinated Universal Time,简写作UTC,之前也被拼做Universal Time Coordinated,有时是Universal Coordinated Time)是由国际无线电咨询委员会定义和建议采用的,并由国际时间局(BIH)负责保持的以国际单位制(SI)秒为单位的时间标度。对与无线电规则相关 的大部分实际应用而言,协调世界时(UTC)与本初子午线(经度零度)上的平均太阳时等效。该时间过去以格林威治平均时(GMT)表示。  

协调世界时使用24小时制的时钟表示,但也可以被转换为12小时制的时钟(AM和PM)。UTC用于飞行和航海,它有时也被称作祖鲁。UTC使用阳历

--------------------------------

GetLocalTime:返回的是本地时间,我建议一般用这个时间来作为你使用的时间

你可能感兴趣的:(MFC)