日期和時間:Automation 支援

本文件說明如何使用類別庫服務相關的日期和時間排列。所描述的程序如下:

COleDateTime 類別提供表示日期和時間資訊。它會 CTime 類別的更細微性和更進一步的範圍。COleDateTimeSpan 類別表示已耗用時間,例如 COleDateTime 兩個物件之間的差異。

COleDateTimeCOleDateTimeSpan 類別是設計來搭配用來自動化的 COleVariant 類別。COleDateTimeCOleDateTimeSpan 也適用於 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 類型結構 tmtime_t,第一個方法分別設定兩 CTime 物件, time1time2,對 4 月 5 日和 4 月 6 日。程式碼會顯示 time1time2 和時間這兩者。

第二個方法會建立兩個物件 COleDateTime 、 oletime1 和 oletime2,並設定為日期和 time1time2相同。它會顯示 oletime1 和 oletime2 和時間這兩者。

CRT 正確計算 23 小時差異。COleDateTimeSpan 計算 24 小時差異。

請注意,使用 COleDateTime::Format作業在這個範例的結尾附近用來正確顯示日期。請參閱知識庫文章<BUG:%D 格式 (「」)。 COleDateTimeCOleDateTimeSpan為」(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);
}

請參閱

概念

日期及時間