CTime类小结1
參考:http://www.cnblogs.com/chuncn/archive/2009/03/12/1409261.html
CTime類(lèi)
1.構(gòu)造和初始化CTime類(lèi)對(duì)象
CTime類(lèi)有下列構(gòu)造函數(shù):
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 );
說(shuō)明:以不同的方式構(gòu)造一個(gè)CTime對(duì)象。可以用一個(gè)已經(jīng)存在的CTime對(duì)象或一個(gè)time_t(在time.h中被定義為long)類(lèi)型變量來(lái)構(gòu)造和初始化CTime對(duì)象,也可以用年、月、日、小時(shí)、分、秒來(lái)構(gòu)造和初始化CTime對(duì)象,還可以用SYSTEMTIME、FILETIME結(jié)構(gòu)來(lái)構(gòu)造和初始化CTime對(duì)象。SYSTEMTIME、FILETIME結(jié)構(gòu)定義如下:
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;????
????? DWORD dwHighDateTime;???
} FILETIME, *PFILETIME, *LPFILETIME;
2.時(shí)間值的提取函數(shù)
(1)GetCurrentTime()???? 獲取系統(tǒng)當(dāng)前時(shí)間。
原型:static CTime PASCAL GetCurrentTime( );
(2)GetTime()??? 由CTime對(duì)象返回一個(gè)time_t變量。
原型:time_t GetTime( ) const;
(3)GetYear()???? 獲取CTime對(duì)象代表的年。
原型:int GetYear( ) const;
以下(4)至(9)函數(shù)原型與GetYear()類(lèi)似。
(4)GetMonth()獲取CTime對(duì)象代表的月。
(5)GetDay() 獲取CTime對(duì)象代表的日期。
(6)GetHour() 獲取CTime對(duì)象代表的小時(shí)。
(7)GetMinute()獲取CTime對(duì)象代表的分。
(8)GetSecond() 獲取CTime對(duì)象代表的秒。
(9)GetDayOfWeek() 獲取CTime對(duì)象代表的星期幾,1代表周日、2代表周一、等等。
3.格式化時(shí)間
成員函數(shù)Format() 將CTime對(duì)象中的時(shí)間信息轉(zhuǎn)化為一個(gè)格式化的字符串。其函數(shù)原型為:
CString Format( LPCTSTR pFormat ) const;
CString Format( UINT nFormatID ) const;
參數(shù)pFormat是格式字符串,類(lèi)似于printf中的格式字符串,格式字符如下:
%a:周的英文縮寫(xiě)形式;
%A:周的英文全名形式;
%b: 月的英文縮寫(xiě)形式;
%B:月的英文全名形式;
%c: 完整的日期和時(shí)間;
%d:十進(jìn)制形式的日期(01-31);
%H:24小時(shí)制的小時(shí)(00-23);
%I: 12小時(shí)制的小時(shí)(00-11);
%j: 十進(jìn)制表示的一年中的第幾天(001-366);
%m: 月的十進(jìn)制表示(01-12);
%M:十進(jìn)制表示的分鐘(00-59);
%p: 12小時(shí)制的上下午標(biāo)示(AM/PM);
%S: 十進(jìn)制表示的秒(00-59);
%U: 一年中的第幾個(gè)星期(00-51),星期日是一周的第一天;
%W: 一年中的第幾個(gè)星期(00-51),星期一是一周的第一天;
%w: 十進(jìn)制表示的星期幾(0-6);
%Y: 十進(jìn)制表示的年;
參數(shù)nFormatID 是格式字符串資源的ID號(hào)。
4.重載運(yùn)算符
operator = :??? 賦予新的時(shí)間。
operator + :??? 增加CTime和CTimeSpan對(duì)象。
operator – :??? 減小CTime和CTimeSpan對(duì)象。
operator += : CTime對(duì)象加一個(gè)CTimeSpan對(duì)象。
operator -= :??? CTime對(duì)象減一個(gè)CTimeSpan對(duì)象。
operator == :??? 比較兩個(gè)絕對(duì)時(shí)間是否相等。
operator != :??? 比較兩個(gè)絕對(duì)時(shí)間是否不相等。
operator > :??? 比較兩個(gè)絕對(duì)時(shí)間,是否前一個(gè)大于后一個(gè)。
operator < :??? 比較兩個(gè)絕對(duì)時(shí)間,是否前一個(gè)小于后一個(gè)。
operator >=??? : 比較兩個(gè)絕對(duì)時(shí)間,是否前一個(gè)大于等于后一個(gè)。
operator <=??? : 比較兩個(gè)絕對(duì)時(shí)間,是否前一個(gè)小于等于后一個(gè)。
?
CTimeSpan類(lèi)
1.構(gòu)造函數(shù)。
CTimeSpan類(lèi)有下列構(gòu)造函數(shù):
(1)CTimeSpan() ;
(2)CTimeSpan( const CTimeSpan& timeSpanSrc );
(3)CTimeSpan( time_t time );
(4)CTimeSpan( LONG lDays, int nHours, int nMins, int nSecs );
參數(shù)timeSpanSrc為一個(gè)已存在的 CTimeSpan 對(duì)象,time為一個(gè)time_t 類(lèi)型的時(shí)間值,lDays, nHours, nMins, nSecs分別為天數(shù)、小時(shí)數(shù)、分?jǐn)?shù)和秒數(shù)。
2.時(shí)間值的提取函數(shù)
(1)GetDays()???? 獲得CTimeSpan類(lèi)對(duì)象中包含的完整的天數(shù)。
(2)GetHours()???? 獲得當(dāng)天的小時(shí)數(shù),值在-23到23之間。
(3)GetTotalHours()???? 獲得CTimeSpan類(lèi)對(duì)象中包含的完整的小時(shí)數(shù)。
(4)GetMinutes()???? 獲得當(dāng)前小時(shí)包含的分?jǐn)?shù),值在-59到59之間。
(5)GetTotalMinutes()??? 獲得CTimeSpan類(lèi)對(duì)象中包含的完整的分?jǐn)?shù)。
(6)GetSeconds()???? 獲得當(dāng)前分鐘包含的秒數(shù),值在-59到59之間。
(7)GetTotalSeconds()??? 獲得CTimeSpan類(lèi)對(duì)象中包含的完整的秒數(shù)。
格式化時(shí)間
Format() 將一個(gè)CTimeSpan對(duì)象轉(zhuǎn)換成格式字符串。使用方式與CTime類(lèi)似,格式化字符包括以下幾個(gè):
%D:???? CTimeSpan的總天數(shù);
%H:???? 不足整天的小時(shí)數(shù);
%M:???? 不足1小時(shí)的分?jǐn)?shù);
%S:???? 不足1分鐘的秒數(shù);
%%:???? 百分號(hào)。
4.重載運(yùn)算符
CTimeSpan類(lèi)也重載了運(yùn)算符“=”,“+”,“-”,“+=”,“-=”,“==”,“!=”,“<”,“>”,“<=”,“>=”,用于CTimeSpan對(duì)象的賦值、加減運(yùn)算及兩個(gè)CTimeSpan對(duì)象的比較。
?
eg.
#include <iostream>
#include <atltime.h>
using namespace std;
void main()
{
??? // CTime 函數(shù)
??? CTime curtime = CTime::GetCurrentTime();
??? int? iyear = curtime.GetYear();
??? int? imonth = curtime.GetMonth();
??? int? iday = curtime.GetDay();
??? int? idayofweek = curtime.GetDayOfWeek();
??? int? ihour = curtime.GetHour();
??? int? iminute = curtime.GetMinute();
??? int? isecond = curtime.GetSecond();
??? cout<<"當(dāng)前時(shí)間:"<<endl;
??? cout<<iyear<<"年";
??? cout<<imonth<<"月";
??? cout<<iday<<"日";
??? cout<<ihour<<"時(shí)";
??? cout<<iminute<<"分";
??? cout<<isecond<<"秒"<<endl;
??? cout<<"星期"<<idayofweek<<"(周日算1)"<<endl<<endl;
??? // 時(shí)間比較
??? CTime begintime = CTime(2006,1,1,0,0,0);
??? cout<<"起始時(shí)間:"<<endl;
??? cout<<begintime.GetYear()<<"年";
??? cout<<begintime.GetMonth()<<"月";
??? cout<<begintime.GetDay()<<"日";
??? cout<<begintime.GetHour()<<"時(shí)";
??? cout<<begintime.GetMinute()<<"分";
??? cout<<begintime.GetSecond()<<"秒"<<endl;
??? cout<<"星期"<<begintime.GetDayOfWeek()<<"(周日算1)"<<endl<<endl;
??? CTimeSpan span;
??? span = curtime - begintime;
??? cout<<"兩時(shí)間相差:"<<endl;
??? cout<<span.GetDays()<<"天";???
??? cout<<span.GetHours()<<"小時(shí)";???
??? cout<<span.GetMinutes()<<"分";???
??? cout<<span.GetSeconds()<<"秒"<<endl;
??? cout<<"總小時(shí)"<<span.GetTotalHours()<<"小時(shí)"<<endl;
??? cout<<"總分鐘"<<span.GetTotalMinutes()<<"分"<<endl;
??? cout<<"總秒"<<span.GetTotalSeconds()<<"秒"<<endl;???
??? cout<<endl;
??? // CTime到CString的轉(zhuǎn)化
??? CString strtime;
??? strtime = curtime.Format(_T("%Y-%m-%d %X"));
???
??? wcout<<(LPCTSTR)strtime<<endl; // 因?yàn)槭褂肬NICODE,或用下面的方面顯示
??? wcout<<strtime.GetString()<<endl;
??? system("pause");
}
結(jié)果為
當(dāng)前時(shí)間:
2011年2月16日20時(shí)37分3秒
星期4(周日算1)
起始時(shí)間:
2006年1月1日0時(shí)0分0秒
星期1(周日算1)
兩時(shí)間相差:
1872天20小時(shí)37分3秒
總小時(shí)44948小時(shí)
總分鐘2696917分
總秒161815023秒
2011-02-16 20:37:03
2011-02-16 20:37:03
請(qǐng)按任意鍵繼續(xù). . .
?
注意:
在控制臺(tái)中使用cout顯示CString類(lèi),
std::cout不支持寬字符,如果需要使用UNICODE,需要使用std::wcout輸出寬字符。同時(shí),需要對(duì)CString做一下轉(zhuǎn)換,LPCTSTR(cpath)或者wcout<<cpath.GetString()<<endl;;或者使用NotSet或者M(jìn)ulti-CharSet就可以使用cout輸出了.
轉(zhuǎn)載于:https://www.cnblogs.com/MMLoveMeMM/articles/3089192.html
總結(jié)
- 上一篇: 求息开头的成语接龙!
- 下一篇: SQL Server 远程无法连接