共用方式為


日期和時間: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);
}

請參閱

概念

日期及時間