添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

MFC 支援數種不同的日期和時間處理方式:

  • 支援自動化 DATE 資料類型 DATE 支援日期、時間和日期/時間值。 COleDateTime COleDateTimeSpan 類別會封裝這項功能。 他們會使用自動化支援來與 類別 COleVariant 合作。

  • 一般用途的時間類別。 CTime CTimeSpan 類別會封裝大部分與 ANSI 標準時間程式庫相關聯的功能,其會在 中 time.h 宣告。

  • 支援系統時鐘。 使用 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 物件,並使用目前時間初始化它。

    取得目前時間

  • 建立 COleDateTime 物件。

  • 呼叫 GetCurrentTime

    COleDateTime timeNow;
    timeNow = COleDateTime::GetCurrentTime();   
    

    計算經過的時間

    此程式示範如何計算兩個 COleDateTimeCOleDateTimeSpan 物件之間的差異,並取得結果。

    若要計算經過的時間

  • 建立兩個 COleDateTime 物件。

  • 將其中 COleDateTime 一個 物件設定為目前時間。

  • 執行一些耗時的工作。

  • 將另一個 COleDateTime 物件設定為目前時間。

  • 採用兩次之間的差異。

    COleDateTime timeStart, timeEnd;
    timeStart = COleDateTime::GetCurrentTime();
    // ... perform time-consuming task
    timeEnd = COleDateTime::GetCurrentTime();
    COleDateTimeSpan spanElapsed = timeEnd - timeStart;   
    

    格式化時間

    格式化時間

    Format使用 或 COleDateTimeSpan 的成員函式 COleDateTime ,建立代表時間或經過時間的字元字串。

    COleDateTime time(1970, 12, 18, 17, 30, 0);
    // 18 December 1970, 5:30 PM
    CString s = time.Format(VAR_DATEVALUEONLY);
    // s contains the date formatted based on 
    // the current national language specifications
    // (locale ID). The time portion is ignored for 
    // formatting purposes in this case.   
    

    如需詳細資訊,請參閱 COleVariant 類別。

    日期和時間:資料庫支援

    從 4.0 版開始,MFC 資料庫程式設計會使用 COleDateTimeCOleDateTimeSpan 類別來表示日期和時間資料。 這些類別也用於自動化,衍生自 類別 COleVariant 。 它們提供比 和 CTimeCTimeSpan 更好的管理日期和時間資料支援。

    日期和時間: SYSTEMTIME 支援

    類別 COleDateTime 具有從 Win32 接受系統和檔案時間的建構函式。

    Win32 FILETIME 結構會將時程表示為 64 位值。 它比 SYSTEMTIME 結構更方便內部儲存,以及 Win32 用來代表檔案建立時間的格式。 如需 結構 SYSTEMTIME 的相關資訊,請參閱 SYSTEMTIME 。 如需 結構 FILETIME 的相關資訊,請參閱 FILETIME

    一般 MFC 主題

    即將推出:在 2024 年,我們將隨著內容的意見反應機制逐步淘汰 GitHub 問題,並以新的意見反應系統來取代。 如需詳細資訊,請參閱 https://aka.ms/ContentUserFeedback

    提交並檢視相關的意見反應

  •