結構:
CTime( int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1
//參數nDST指定是否實行夏令時,為0時表示實行標準時間,為正數時表示實行夏令時,為負數時由系統自動計算實行的是標準時間還是夏令時。 );
===================================================================== C++中,CTime 與 CString轉換 CTime m_StartTime1 = CTime::GetCurrentTime(); CString csStartTime = m_StartTime1.Format( "%Y%m%d%H%M%S" ); 一.將CString轉為CTime的幾種方法 CString timestr = "2000年04月05日"; int a,b,c ; sscanf(timestr.GetBuffer(timestr.GetLength()),"%d年%d月%d日",&a,&b,&c); CTime time(a,b,c,0,0,0); --------or - --------------------- CString s("2001-8-29 19:06:23"); int nYear, nMonth, nDate, nHour, nMin, nSec; sscanf(s, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec); CTime t(nYear, nMonth, nDate, nHour, nMin, nSec); ---- or ------------------------ CString timestr = "2000年04月05日"; int year,month,day; BYTE tt[5]; //get year memset(tt, 0, sizeof(tt)); tt[0] = timestr[0]; tt[1] = timestr[1]; tt[2] = timestr[2]; tt[3] = timestr[3]; year= atoi((char *)tt); //get month memset(tt, 0, sizeof(tt)); tt[0] = timestr[6]; tt[1] = timestr[7]; month = atoi((char *)tt); //get day memset(tt, 0, sizeof(tt)); tt[0] = timestr[10]; tt[1] = timestr[11]; CTime time(year,month,day,0,0,0); 從上面來看,很明顯使用sscanf()函數的優勢. 二.將CTime轉換為CString的方法: CTime tmSCan = CTime::GetCurrentTime(); CString szTime = tmScan.Format("'%Y-%m-%d %H:%M:%S'"); 這樣得到的日期時間字符串就是以"2006-11-27 23:30:59"的格式. //取得CTime中的日期 CString cstrDate = tmScan.Format("%Y-%m-%d"); //取得CTime中的時間 CString cstrTime = tmScan.Format("%H:%M-%S"); sprintf還有個不錯的表妹:strftime,專門用于格式化時間字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是畢竟小姑娘家心細,她還要調用者指定緩沖區的最大長度,可能是為了在出現問題時可以推卸責任吧。這里舉個例子: 更多更好的sprintf()函數說明參考:《spirntf,你知道多少?》 time_t t = time(0); //產生"YYYY-MM-DD hh:mm:ss"格式的字符串。 char s[32]; strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t)); sprintf在MFC中也能找到他的知音:CString::Format,strftime在MFC中自然也有她的同道:CTime::Format,這一對由于從面向對象哪里得到了贊助,用以寫出的代碼更覺優雅
=====================================================================
獲取時間及時間參數方法:
static CTime WINAPI GetCurrentTime( ); 獲取系統當前日期和時間。返回表示當前日期和時間的CTime對象。
CString Format(LPCTSTR pszFormat) const; 將CTime對象中的時間信息格式化為字符串。參數pszFormat是格式化字符串,與printf中的格式化字符串類似,格式化字符串中帶有%前綴的格式碼將會被相應的CTime時間分量代替,而其他字符會原封不動的拷貝到返回字符串中。格式碼及含義如下: %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: 十進制表示的年。
CTime(const SYSTEMTIME& st,int nDST = - 1) ; 以一個SYSTEMTIME結構體變量來構造CTime對象。SYSTEMTIME結構體也是我們對日期時間的常用表示方式。參數st為以本地時間表示的SYSTEMTIME對象,參數nDST同上。 int GetYear( ) const; 獲取CTime對象表示時間的年份。范圍從1970年1月1日到2038年(包括2038年)1月18日。 int GetMonth( ) const; 獲取CTime對象表示時間的月份。范圍為1到12。 int GetDay( ) const; 獲取CTime對象表示時間的日期。范圍為1到31。 int GetHour( ) const; 獲取CTime對象表示時間的小時。范圍為0到23。 int GetMinute( ) const; 獲取CTime對象表示時間的分鐘。范圍為0到59。 int GetSecond( ) const; 獲取CTime對象表示時間的秒。范圍為0到59。 int GetDayOfWeek( ) const; 此函數的返回值表示CTime對象代表的是星期幾,1表示是周日,2表示是周一,以此類推。
操作與比較:
CTime operator +(CTimeSpan timeSpan) const; 將CTime對象和CTimeSpan對象相加,返回一個CTime對象。實際意義就是在一個時間的基礎上推后一個時間間隔,得到一個新的時間。 CTime operator -(CTimeSpan timeSpan) const; 將CTime對象和一個CTimeSpan相減,返回一個CTime對象。實際意義就是在一個時間的基礎上提前一個時間間隔,得到一個新的時間。 CTimeSpan operator -(CTime time) const; 將該CTime對象和另一個CTime對象相減,返回一個CTimeSpan對象。實際意義就是計算兩個時間點的間隔,得到一個CTimeSpan對象。 CTime& operator +=(CTimeSpan span); 為該CTime對象增加一個span表示的時間間隔。 CTime& operator -=(CTimeSpan span); 為該CTime對象減去一個span表示的時間間隔。 CTime& operator =(__time64_t time); 為該CTime對象賦予一個新的時間值。 簡單說下剩下的幾個重載i運算符: operator == : 比較兩個絕對時間是否相等。 operator != : 比較兩個絕對時間是否不相等。 operator > : 比較兩個絕對時間,是否前一個大于后一個。 operator < : 比較兩個絕對時間,是否前一個小于后一個。 operator >= : 比較兩個絕對時間,是否前一個大于等于后一個。 operator <= : 比較兩個絕對時間,是否前一個小于等于后一個
CTime( int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1
//參數nDST指定是否實行夏令時,為0時表示實行標準時間,為正數時表示實行夏令時,為負數時由系統自動計算實行的是標準時間還是夏令時。 );
===================================================================== C++中,CTime 與 CString轉換 CTime m_StartTime1 = CTime::GetCurrentTime(); CString csStartTime = m_StartTime1.Format( "%Y%m%d%H%M%S" ); 一.將CString轉為CTime的幾種方法 CString timestr = "2000年04月05日"; int a,b,c ; sscanf(timestr.GetBuffer(timestr.GetLength()),"%d年%d月%d日",&a,&b,&c); CTime time(a,b,c,0,0,0); --------or - --------------------- CString s("2001-8-29 19:06:23"); int nYear, nMonth, nDate, nHour, nMin, nSec; sscanf(s, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec); CTime t(nYear, nMonth, nDate, nHour, nMin, nSec); ---- or ------------------------ CString timestr = "2000年04月05日"; int year,month,day; BYTE tt[5]; //get year memset(tt, 0, sizeof(tt)); tt[0] = timestr[0]; tt[1] = timestr[1]; tt[2] = timestr[2]; tt[3] = timestr[3]; year= atoi((char *)tt); //get month memset(tt, 0, sizeof(tt)); tt[0] = timestr[6]; tt[1] = timestr[7]; month = atoi((char *)tt); //get day memset(tt, 0, sizeof(tt)); tt[0] = timestr[10]; tt[1] = timestr[11]; CTime time(year,month,day,0,0,0); 從上面來看,很明顯使用sscanf()函數的優勢. 二.將CTime轉換為CString的方法: CTime tmSCan = CTime::GetCurrentTime(); CString szTime = tmScan.Format("'%Y-%m-%d %H:%M:%S'"); 這樣得到的日期時間字符串就是以"2006-11-27 23:30:59"的格式. //取得CTime中的日期 CString cstrDate = tmScan.Format("%Y-%m-%d"); //取得CTime中的時間 CString cstrTime = tmScan.Format("%H:%M-%S"); sprintf還有個不錯的表妹:strftime,專門用于格式化時間字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是畢竟小姑娘家心細,她還要調用者指定緩沖區的最大長度,可能是為了在出現問題時可以推卸責任吧。這里舉個例子: 更多更好的sprintf()函數說明參考:《spirntf,你知道多少?》 time_t t = time(0); //產生"YYYY-MM-DD hh:mm:ss"格式的字符串。 char s[32]; strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t)); sprintf在MFC中也能找到他的知音:CString::Format,strftime在MFC中自然也有她的同道:CTime::Format,這一對由于從面向對象哪里得到了贊助,用以寫出的代碼更覺優雅
=====================================================================
獲取時間及時間參數方法:
static CTime WINAPI GetCurrentTime( ); 獲取系統當前日期和時間。返回表示當前日期和時間的CTime對象。
CString Format(LPCTSTR pszFormat) const; 將CTime對象中的時間信息格式化為字符串。參數pszFormat是格式化字符串,與printf中的格式化字符串類似,格式化字符串中帶有%前綴的格式碼將會被相應的CTime時間分量代替,而其他字符會原封不動的拷貝到返回字符串中。格式碼及含義如下: %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: 十進制表示的年。
CTime(const SYSTEMTIME& st,int nDST = - 1) ; 以一個SYSTEMTIME結構體變量來構造CTime對象。SYSTEMTIME結構體也是我們對日期時間的常用表示方式。參數st為以本地時間表示的SYSTEMTIME對象,參數nDST同上。 int GetYear( ) const; 獲取CTime對象表示時間的年份。范圍從1970年1月1日到2038年(包括2038年)1月18日。 int GetMonth( ) const; 獲取CTime對象表示時間的月份。范圍為1到12。 int GetDay( ) const; 獲取CTime對象表示時間的日期。范圍為1到31。 int GetHour( ) const; 獲取CTime對象表示時間的小時。范圍為0到23。 int GetMinute( ) const; 獲取CTime對象表示時間的分鐘。范圍為0到59。 int GetSecond( ) const; 獲取CTime對象表示時間的秒。范圍為0到59。 int GetDayOfWeek( ) const; 此函數的返回值表示CTime對象代表的是星期幾,1表示是周日,2表示是周一,以此類推。
操作與比較:
CTime operator +(CTimeSpan timeSpan) const; 將CTime對象和CTimeSpan對象相加,返回一個CTime對象。實際意義就是在一個時間的基礎上推后一個時間間隔,得到一個新的時間。 CTime operator -(CTimeSpan timeSpan) const; 將CTime對象和一個CTimeSpan相減,返回一個CTime對象。實際意義就是在一個時間的基礎上提前一個時間間隔,得到一個新的時間。 CTimeSpan operator -(CTime time) const; 將該CTime對象和另一個CTime對象相減,返回一個CTimeSpan對象。實際意義就是計算兩個時間點的間隔,得到一個CTimeSpan對象。 CTime& operator +=(CTimeSpan span); 為該CTime對象增加一個span表示的時間間隔。 CTime& operator -=(CTimeSpan span); 為該CTime對象減去一個span表示的時間間隔。 CTime& operator =(__time64_t time); 為該CTime對象賦予一個新的時間值。 簡單說下剩下的幾個重載i運算符: operator == : 比較兩個絕對時間是否相等。 operator != : 比較兩個絕對時間是否不相等。 operator > : 比較兩個絕對時間,是否前一個大于后一個。 operator < : 比較兩個絕對時間,是否前一個小于后一個。 operator >= : 比較兩個絕對時間,是否前一個大于等于后一個。 operator <= : 比較兩個絕對時間,是否前一個小于等于后一個