日期和時間:Automation 支援
本文件說明如何使用類別庫服務相關的日期和時間排列。所描述的程序如下:
COleDateTime 類別提供表示日期和時間資訊。它會 CTime 類別的更細微性和更進一步的範圍。COleDateTimeSpan 類別表示已耗用時間,例如 COleDateTime 兩個物件之間的差異。
COleDateTime 和 COleDateTimeSpan 類別是設計來搭配用來自動化的 COleVariant 類別。COleDateTime 和 COleDateTimeSpan 也適用於 MFC 程式設計的資料庫,不過,可以使用它們,每當您要管理的日期和時間值。雖然 COleDateTime 類別來 CTime 類別具有值和更細微的更大的範圍,則會 CTime需要更多儲存每一個物件。在與基礎 DATE 型別時,也有一些特殊考量。如需的詳細資訊請參閱 Date 型別 在 DATE的實作。
COleDateTime 物件可以用來表示在 31 年 1 月 1 日,介於 100 與 9999 之間的日期,十二月。COleDateTime 物件是浮點數值,具有 1 毫秒的近似解析。COleDateTime 根據 DATE 資料型別,定義在 COleDateTime::operator 日期下的 MFC 文件。DATE 的實際實作在這些界限以外。COleDateTime 實作施加這些繫結可以簡化與類別一起使用。
不支援COleDateTime 凱撒曆日期。西曆假設 Just-In-Time 擴充為 Jan 100, 1。
COleDateTime 忽略日光節約時間 (DST)。下列程式碼範例會比較計算交叉 DST 大進行變更的日期時間兩個方法:一個使用 CRT 和其他使用 COleDateTime。DST 參數,在大部分的地區設定,第二個星期、和在 10 月第三個的。
使用標準 C 類型結構 tm 和 time_t,第一個方法分別設定兩 CTime 物件, time1 和 time2,對 4 月 5 日和 4 月 6 日。程式碼會顯示 time1 和 time2 和時間這兩者。
第二個方法會建立兩個物件 COleDateTime 、 oletime1 和 oletime2,並設定為日期和 time1 和 time2相同。它會顯示 oletime1 和 oletime2 和時間這兩者。
CRT 正確計算 23 小時差異。COleDateTimeSpan 計算 24 小時差異。
請注意,使用 COleDateTime::Format作業在這個範例的結尾附近用來正確顯示日期。請參閱知識庫文章<BUG:%D 格式 (「」)。 COleDateTime 和 COleDateTimeSpan為」(Q167338)。
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);
}