支援系統時鐘。 使用 MFC 3.0 版,Win32
SYSTEMTIME
和
FILETIME
資料類型的支援已新增至
CTime
。
日期和時間:Automation 支援
類別
COleDateTime
提供一種方式來表示日期和時間資訊。 它提供比 類別更精細的細微性和更大的範圍
CTime
。 類別
COleDateTimeSpan
代表經過的時間,例如兩個
COleDateTime
物件之間的差異。
COleDateTime
和
COleDateTimeSpan
類別是設計來與 類別搭配
COleVariant
使用。
COleDateTime
和
COleDateTimeSpan
在 MFC 資料庫程式設計中也很有用,但每當您想要操作日期和時間值時,都可以使用它們。 雖然 類別
COleDateTime
的值範圍和資料細微性比
CTime
類別更精細,但每個物件
CTime
需要比 更多的儲存空間。 使用基礎 DATE 類型時,也有一些特殊考慮。 如需 實作
DATE
的詳細資訊,請參閱
DATE
類型
。
COleDateTime
物件可用來表示介於 100 年 1 月 1 日到 9999 年 12 月 31 日之間的日期。
COleDateTime
物件是浮點值,其解析度大約為 1 毫秒。
COleDateTime
是以 MFC 檔中
COleDateTime::operator DATE
定義的資料類型為基礎
DATE
。 的實際實作
DATE
延伸超過這些界限。 實作
COleDateTime
會強制執行這些界限,以便更輕鬆地使用 類別。
COleDateTime
不支援 Julian 日期。 西曆假設可追溯到 100 年 1 月 1 日。
COleDateTime
會忽略日光節約時間 (DST)。 下列程式碼範例會比較兩個計算跨越 DST 切換日期的時間範圍的方法:一個使用 CRT,另一個則使用
COleDateTime
。
第一個方法分別使用標準 C 型別結構和
tm
,將 兩個
CTime
物件
time1
和
time2
設定為 4 月 5 日和
time_t
4 月 6 日。 程式碼會顯示
time1
和 ,
time2
以及它們之間的時間範圍。
第二個方法會建立兩個
COleDateTime
物件 和
oletime2
,
oletime1
並將其設定為與
time1
和
time2
相同的日期。 它會顯示
oletime1
和
oletime2
,以及它們之間的時間範圍。
CRT 正確計算 23 小時的差異。
COleDateTimeSpan
計算 24 小時的差異。
void CDTDlg::OnPaint()
CPaintDC dc(this); // device context for painting
time_t date1_t, date2_t;
tm date_tm;
date_tm.tm_hour = 12;
date_tm.tm_min = 0;
date_tm.tm_mon = 3;
date_tm.tm_sec = 0;
date_tm.tm_wday = 0; //Day of week (0-6; Sunday = 0)
date_tm.tm_yday = 0;
date_tm.tm_year = 97;
date_tm.tm_isdst = -1; //Positive if Daylight Saving Time is in effect;
//0 if Daylight Saving Time is not in effect;
//Negative if status of DST is unknown.
date_tm.tm_mday = 6;
date2_t = mktime(&date_tm);
date_tm.tm_mday = 5;
date_tm.tm_isdst = 0;
date1_t = mktime(&date_tm);
CTime time1(date1_t), time2(date2_t);
CTimeSpan ts = time2 - time1;
dc.TextOut(0, 0, CString(_T("CTime")));
dc.TextOut(0, 20, time1.Format(_T("%H:%M:%S %A, %B %d, %Y")));
dc.TextOut(0, 40, time2.Format(_T("%H:%M:%S %A, %B %d, %Y")));
dc.TextOut(0, 60, ts.Format(_T("%H:%M:%S and %D days")));
COleDateTime oletime1(date1_t), oletime2(date2_t);
COleDateTimeSpan olets = oletime2 - oletime1;
dc.TextOut(0, 120, CString(_T("COleDateTime")));
dc.TextOut(0, 140, oletime1.Format(_T("%H:%M:%S %A, %B %d, %Y")));
dc.TextOut(0, 160, oletime2.Format(_T("%H:%M:%S %A, %B %d, %Y")));
//Work-around bug in COleDateTime::Format("%D")
CString str;
str.Format(_T("%s and %d days"), (LPCTSTR)olets.Format(_T("%H:%M:%S")),
olets.GetDays());
dc.TextOut(0, 180, str);
取得目前時間
下列程式示範如何建立
COleDateTime
物件,並使用目前時間初始化它。
取得目前時間