ctime

ctime

ctime分函式和類兩種用途。ctime功能是 把日期和時間轉換為字元串,而ctime類的對象表示的時間是基於格林威治標準時間(GMT)的。

ctime函式

函式: ctime

功 能: 把日期和時間轉換為字元串

用 法: char *ctime(const time_t *time);

程式例:

註:若在linux下使用本函式,需要include <time.h>頭檔案

CTime類

CTime類的對象表示的時間是基於格林威治標準時間(GMT)的。CTimeSpan類的對象表示的是時間間隔。

CTime類一般不會被繼承使用。其對象的大小是8個位元組。

CTime表示的日期上限是2038年1月18日,下限是1970年1月1日 12:00:00 AM GMT。

CTime類的成員函式

CTime();

構造一個未經初始化的CTime對象。此構造函式使我們可以定義一個CTime對象的數組,在使用數組前需要以有效的時間值為其初始化。

CTime(__time64_t time);

以一個__time64_t(注意:最前面的下劃線有兩條)類型的數據來構造一個CTime對象。參數time是一個__time64_t類型的值,表示自GMT時間1970年1月1日零點以來的秒數,這裡要注意的是,參數time代表的時間會轉換為本地時間保存到構造的CTime對象中。例如,我們傳遞參數0構造一個CTime對象,然後調用CTime對象的GetHour成員函式將返回8,因為參數0代表的GMT時間轉換為台北時間後為1970年1月1日 8:00:00。

CTime(

int nYear,

int nMonth,

int nDay,

int nHour,

int nMin,

int nSec,

int nDST = -1

);

以本地時間的年、月、日、小時、分鐘、秒等幾個時間分量構造CTime對象。參數nYear、nMonth、nDay、nHour、nMin、nSec分別表示年、月、日、小時、分鐘、秒,取值範圍如下:

時間分量 取值範圍

nYear 1970-3000

nMonth 1-12

nDay 1-31

nHour 0-23

nMin 0-59

nSec 0-59

參數nDST指定是否實行夏令時,為0時表示實行標準時間,為正數時表示實行夏令時,為負數時由系統自動計算實行的是標準時間還是夏令時。

ctime ctime

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

以一個SYSTEMTIME結構體變數來構造CTime對象。SYSTEMTIME結構體也是我們對日期時間的常用表示方式。參數st為以本地時間表示的SYSTEMTIME對象,參數nDST同上。

static CTime WINAPI GetCurrentTime( );

獲取系統當前日期和時間。返回表示當前日期和時間的CTime對象。

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表示是周一,以此類推。

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

ctime ctime

%p: 12小時制的上下午標示(AM/PM)。

%S: 十進制表示的秒(00-59)。

%U: 一年中的第幾個星期(00-51),星期日是一周的第一天。

%W: 一年中的第幾個星期(00-51),星期一是一周的第一天。

%w: 十進制表示的星期幾(0-6)。

%Y: 十進制表示的年。

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 != : 比較兩個絕對時間是否不相等。

ctime ctime

operator > : 比較兩個絕對時間,是否前一個大於後一個。

operator < : 比較兩個絕對時間,是否前一個小於後一個。

operator >= : 比較兩個絕對時間,是否前一個大於等於後一個。

operator <= : 比較兩個絕對時間,是否前一個小於等於後一個。

=====================================================================

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

day = atoi((char *)tt);

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,這一對由於從面向對象哪裡得到了贊助,用以寫出的代碼更覺優雅

相關詞條

相關搜尋

熱門詞條

聯絡我們