CTime 沒有基類。

CTime 值是以國際標準時間(UTC)為基礎,相當於國際標準時間(格林威治標準時間,GMT)。 如需如何決定時區的相關資訊,請參閱 時間管理

當您建立 CTime 物件時,請將 nDST 參數設定為 0,表示標準時間生效,或設定為大於 0 的值,表示日光節約時間有效,或設定小於零的值,讓 C 執行時間程式庫程式碼計算標準時間或日光節約時間是否有效。 tm_isdst 是必要的欄位。 如果未設定,則其值未定義,而且 mktime 的傳回值 無法預測。 如果 timeptr 指向先前呼叫 asctime_s _gmtime_s localtime_s 所傳回的 tm 結構,則 tm_isdst 欄位會包含正確的值。

隨附類別 CTimeSpan 代表時間間隔。

CTime CTimeSpan 類別不是針對衍生所設計。 因為沒有虛擬函式,因此 和 CTimeSpan 物件的大小 CTime 正好是 8 個位元組。 大部分成員函式都是內嵌的。

上限為 12/31/3000。 下限為 1/1/1970 上午 12:00:00 GMT。

如需使用 CTime 的詳細資訊,請參閱執行時間 程式庫中的日期和時間管理 文章 。

結構 CTime 已從 MFC 7.1 變更為 MFC 8.0。 如果您使用 MFC 8.0 或更新版本的 運算子 << 來序列化 CTime 結構 ,則較舊版本的 MFC 將無法讀取產生的檔案。

標頭: atltime.h

CTime 比較運算子

比較運算子。

bool operator==(CTime time) const throw();
bool operator!=(CTime time) const throw();
bool operator<(CTime time) const throw();
bool operator>(CTime time) const throw();
bool operator<=(CTime time) const throw();
bool operator>=(CTime time) const throw();
要比較的 CTime 物件。

如果條件為 true,這些運算子會比較兩個絕對時間,並傳回 TRUE;否則為 FALSE。

CTime t1 = CTime::GetCurrentTime();
CTime t2 = t1 + CTimeSpan(0, 1, 0, 0);    // 1 hour later
ATLASSERT(t1 != t2);
ATLASSERT(t1 < t2);
ATLASSERT(t1 <= t2);   

CTime::CTime

建立以指定時間初始化的新 CTime 物件。

CTime() throw();
CTime(__time64_t time) throw();
CTime(int nYear, int nMonth, int nDay,
      int nHour, int nMin, int nSec, int nDST = -1);
CTime(WORD wDosDate, WORD wDosTime, int nDST = -1);
CTime(const SYSTEMTIME& st, int nDST = - 1) throw();
CTime(const FILETIME& ft, int nDST = - 1);
CTime(const DBTIMESTAMP& dbts, int nDST = -1) throw();

timeSrc
表示 CTime 已經存在的物件。

時間 __time64_t 值,這是 1970 年 1 月 1 日 UTC 之後的秒數。 請注意,這會調整為您的當地時間。 例如,如果您位於紐約,並藉由傳遞 0 的參數來建立 CTime 物件, CTime::GetMonth 會傳回 12。

nYear nMonth nDay nHour nMin nSec
指出要複製到新 CTime 物件的日期和時間值。

指出日光節約時間是否有效。 可以有三個值之一:

  • nDST 設定為 0Standard 時間生效。

  • nDST 設定為大於 0Daylight 節省時間的值生效。

  • nDST 設定為小於 0 的值預設值。 自動計算標準時間或日光節約時間是否有效。

    wDosDate wDosTime
    要轉換成日期/時間值的 MS-DOS 日期和時間值,並複製到新的 CTime 物件。

    轉換成日期/時間值的 SYSTEMTIME 結構,並複製到新的 CTime 物件。

    要轉換成日期/時間值的 FILETIME 結構,並複製到新的 CTime 物件中。

    包含目前當地時間之 DBTIMESTAMP 結構的參考。

    每個建構函式如下所述:

  • CTime(); 建構未初始化 CTime 的物件。 此建構函式可讓您定義 CTime 物件陣列。 您應該先使用有效時間初始化這類陣列,再使用。

  • CTime( const CTime& ); 從另一個 CTimeCTime 值建構 物件。

  • CTime( __time64_t );CTime __time64_t 型別建構 物件。 此建構函式需要 UTC 時間,並將結果轉換成本地時間,再儲存結果。

  • CTime( int, int, ...);CTime從本地時間元件建構物件,每個元件受限於下列範圍:

    此建構函式會將適當的轉換為 UTC。 如果一或多個時間元件超出範圍,Microsoft Foundation Class Library 的偵錯版本會判斷提示。 您必須先驗證引數,才能呼叫。 此建構函式需要當地時間。

  • CTime( WORD, WORD );CTime從指定的 MS-DOS 日期和時間值建構 物件。 此建構函式需要當地時間。

  • CTime( const SYSTEMTIME& );CTimeSYSTEMTIME 結構建構 物件。 此建構函式需要當地時間。

  • CTime( const FILETIME& );CTimeFILETIME 結構建構 物件。 您最有可能不會直接使用 CTime FILETIME 初始化。 如果您使用 CFile 物件來操作檔案,請 CFile::GetStatus 透過 CTimeFILETIME 結構初始化的物件擷取檔案時間戳記。 此建構函式假設時間是以 UTC 為基礎,並在儲存結果之前自動將值轉換成當地時間。

    只有在包含 OLEDB.h 時,才能使用 參數 DBTIMESTAMP 的建構函式。

    如需詳細資訊,請參閱 Windows SDK 中的 SYSTEMTIME FILETIME 結構。 另請參閱 Windows SDK 中的 MS-DOS 日期和時間 專案。

    time_t osBinaryTime;  // C run-time time (defined in <time.h>)
    time(&osBinaryTime) ;  // Get the current time from the 
                             // operating system.
    CTime time1; // Empty CTime. (0 is illegal time value.)
    CTime time2 = time1; // Copy constructor.
    CTime time3(osBinaryTime);  // CTime from C run-time time
    CTime time4(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999   
    

    CTime::Format

    呼叫這個成員函式,以建立日期時間值的格式化標記法。

    CString Format(LPCTSTR pszFormat) const;
    CString Format(UINT nFormatID) const;
    

    pszFormat
    格式字串,類似于 printf 格式化字串。 格式化程式碼前面加上百分比 ( % ) 符號,會由對應的 CTime 元件取代。 格式化字串中的其他字元會保持不變地複製到傳回的字串。 如需格式化程式碼的清單,請參閱執行時間函 式 strftime

    nFormatID
    識別此格式之字串的識別碼。

    包含格式化時間的 CString

    如果這個 CTime 物件的狀態為 Null,則傳回值是空字串。

    如果要格式化的日期時間值從 1970 年 1 月 1 日午夜到 3000 年 12 月 31 日通用國際標準時間 (UTC) 之間,這個方法會擲回例外狀況。

    CTime t(1999, 3, 19, 22, 15, 0); 
    // 10:15 PM March 19, 1999
    CString s = t.Format(_T("%A, %B %d, %Y"));
    ATLASSERT(s == _T("Friday, March 19, 1999"));   
    

    CTime::FormatGmt

    產生對應至這個 CTime 物件的格式化字串。

    CString FormatGmt(LPCTSTR pszFormat) const;
    CString FormatGmt(UINT nFormatID) const;
    

    pszFormat
    指定與格式化字串類似的 printf 格式字串。 如需詳細資訊,請參閱執行時間函 式 strftime

    nFormatID
    識別此格式之字串的識別碼。

    包含格式化時間的 CString

    時間值不會轉換,因此會反映 UTC。

    如果要格式化的日期時間值從 1970 年 1 月 1 日午夜到 3000 年 12 月 31 日通用國際標準時間 (UTC) 之間,這個方法會擲回例外狀況。

    請參閱 CTime::Format 範例。

    CTime::GetAsDBTIMESTAMP

    呼叫這個成員函式,將儲存在 物件中的 CTime 時間資訊轉換為 Win32 相容的 DBTIMESTAMP 結構。

    bool GetAsDBTIMESTAMP(DBTIMESTAMP& dbts) const throw();
    包含目前當地時間之 DBTIMESTAMP 結構的參考。

    如果成功則為非零;否則為 0。

    將產生的時間儲存在參考的 dbts 結構中。 DBTIMESTAMP此函式初始化的資料結構會將其 fraction 成員設定為零。

    CTime t = CTime::GetCurrentTime();
    DBTIMESTAMP ts;
    t.GetAsDBTIMESTAMP(ts); // Retrieves the time in t into the ts structure
    

    CTime::GetAsSystemTime

    呼叫這個成員函式,將儲存在 物件中的 CTime 時間資訊轉換為 Win32 相容的 SYSTEMTIME 結構。

    bool GetAsSystemTime(SYSTEMTIME& st) const throw();
    

    timeDest
    SYSTEMTIME 結構的參考 ,這個結構會保存物件的轉換日期/時間值 CTime

    如果成功,則為 TRUE,否則為 FALSE。

    GetAsSystemTime 會將產生的時間儲存在參考 的 timeDest 結構中。 SYSTEMTIME此函式初始化的資料結構會將其 wMilliseconds 成員設定為零。

    // Convert CTime to FILETIME
    CTime time(CTime::GetCurrentTime());
    SYSTEMTIME timeDest;
    time.GetAsSystemTime(timeDest);
    FILETIME fileTime;
    ::SystemTimeToFileTime(&timeDest, &fileTime);   
    

    CTime::GetCurrentTime

    CTime傳回 物件,表示目前的時間。

    static CTime WINAPI GetCurrentTime() throw();
    

    傳回國際標準時間 (UTC) 中的目前系統日期和時間。

    CTime t = CTime::GetCurrentTime();   
    

    CTime::GetDay

    傳回 物件所代表的 CTime 日期。

    int GetDay() const throw();
    

    根據當地時間,傳回範圍 1 到 31 的月份日期。

    此函式會呼叫 GetLocalTm ,它會使用內部、靜態配置的緩衝區。 因為呼叫其他 CTime 成員函式,因此會覆寫此緩衝區中的資料。

    // Example for CTime::GetDay, CTime::GetMonth, and CTime::GetYear
    CTime t(1999, 3, 19, 22, 15, 0); // 10:15 PM March 19, 1999
    ATLASSERT(t.GetDay() == 19);
    ATLASSERT(t.GetMonth() == 3);
    ATLASSERT(t.GetYear() == 1999);
    

    CTime::GetDayOfWeek

    傳回 物件所代表的星期天 CTime

    int GetDayOfWeek() const throw();
    

    根據當地時間傳回一周中的日期;1 = 星期日,2 = 星期一,至 7 = 星期六。

    此函式會呼叫 GetLocalTm ,它會使用內部靜態配置的緩衝區。 因為呼叫其他 CTime 成員函式,因此會覆寫此緩衝區中的資料。

    // Print out the day of the week using localized day name
    UINT DayOfWeek[] = {
       LOCALE_SDAYNAME7,   // Sunday
       LOCALE_SDAYNAME1,   
       LOCALE_SDAYNAME2,
       LOCALE_SDAYNAME3,
       LOCALE_SDAYNAME4, 
       LOCALE_SDAYNAME5, 
       LOCALE_SDAYNAME6   // Saturday
    TCHAR strWeekday[256];
    CTime time(CTime::GetCurrentTime());   // Initialize CTime with current time
    ::GetLocaleInfo(LOCALE_USER_DEFAULT,   // Get string for day of the week from system
       DayOfWeek[time.GetDayOfWeek()-1],   // Get day of week from CTime
       strWeekday, sizeof(strWeekday) / sizeof(strWeekday[0]));
    ATLTRACE(_T("%s\n"), strWeekday);               // Print out day of the week   
    

    CTime::GetGmtTm

    取得結構 tm ,其中包含這個 CTime 物件中包含的時間分解。

    struct tm* GetGmtTm(struct tm* ptm) const;
    指向將接收時間資料的緩衝區。 如果此指標為 Null,則會擲回例外狀況。

    填入 結構 tm 的指標,如 include 檔案 TIME.H 中所定義。 如需結構配置,請參閱 gmtime、_gmtime32 _gmtime64

    GetGmtTm 會傳回 UTC。

    ptm 不可以是 Null。 如果您想要還原為舊的行為,其中 ptm 可以是 Null, 表示應該使用內部、靜態配置的緩衝區,然後取消定義_SECURE_ATL。

    // Compute difference between local time and GMT
    CTime time(CTime::GetCurrentTime());
    tm t1, t2;
    time.GetLocalTm(&t1);
    time.GetGmtTm(&t2);
    ATLTRACE(_T("Difference between local time and GMT is %d hours.\n"), 
       t1.tm_hour - t2.tm_hour);   
    

    CTime::GetHour

    傳回 物件所代表的 CTime 小時。

    int GetHour() const throw();
    

    根據當地時間傳回範圍 0 到 23 中的小時。

    此函式會呼叫 GetLocalTm ,它會使用內部靜態配置的緩衝區。 因為呼叫其他 CTime 成員函式,因此會覆寫此緩衝區中的資料。

    // Example for CTime::GetHour, CTime::GetMinute, and CTime::GetSecond
    CTime t(1999, 3, 19, 22, 15, 0); // 10:15 PM March 19, 1999
    ATLASSERT(t.GetSecond() == 0);
    ATLASSERT(t.GetMinute() == 15);
    ATLASSERT(t.GetHour() == 22);   
    

    CTime::GetLocalTm

    取得結構 tm ,其中包含這個 CTime 物件中包含的時間分解。

    struct tm* GetLocalTm(struct tm* ptm) const;
    指向將接收時間資料的緩衝區。 如果此指標為 Null,則會擲回例外狀況。

    填入 結構 tm 的指標,如 include 檔案 TIME.H 中所定義。 如需結構配置,請參閱 gmtime、_gmtime32 _gmtime64

    GetLocalTm 會傳回當地時間。

    ptm 不可以是 Null。 如果您想要還原為舊的行為,其中 ptm 可以是 Null, 表示應該使用內部、靜態配置的緩衝區,然後取消定義_SECURE_ATL。

    CTime t(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999
    tm osTime;  // A structure containing time elements.
    t.GetLocalTm(&osTime);
    ATLASSERT(osTime.tm_mon == 2); // Note zero-based month!   
    

    CTime::GetMinute

    傳回 物件所表示的 CTime 分鐘。

    int GetMinute() const throw();
    

    根據當地時間,傳回範圍 0 到 59 中的分鐘。

    此函式會呼叫 GetLocalTm ,它會使用內部靜態配置的緩衝區。 因為呼叫其他 CTime 成員函式,因此會覆寫此緩衝區中的資料。

    請參閱 GetHour 範例。

    CTime::GetMonth

    傳回 物件所代表的 CTime 月份。

    int GetMonth() const throw();
    

    根據當地時間傳回月份,範圍 1 到 12(1 = 1 月)。

    此函式會呼叫 GetLocalTm ,它會使用內部靜態配置的緩衝區。 因為呼叫其他 CTime 成員函式,因此會覆寫此緩衝區中的資料。

    請參閱 GetDay 範例。

    CTime::GetSecond

    傳回 物件所表示的第 CTime 二個 。

    int GetSecond() const throw();
    

    根據當地時間,傳回範圍 0 到 59 中的第二個。

    此函式會呼叫 GetLocalTm ,它會使用內部靜態配置的緩衝區。 因為呼叫其他 CTime 成員函式,因此會覆寫此緩衝區中的資料。

    請參閱 GetHour 範例。

    CTime::GetTime

    回指定 CTime 物件的__time64_t 值。

    __time64_t GetTime() const throw();
    

    GetTime 會傳回目前 CTime 物件與 1970 年 1 月 1 日之間的秒數。

    CTime t(2005, 10, 20, 23, 50, 0); // 11:50 PM October 20, 2005
    time_t osBinaryTime = t.GetTime();  // time_t defined in <time.h>
    _tprintf_s(_T("time_t = %ld\n"), osBinaryTime);
    

    CTime::GetYear

    傳回 物件所代表的 CTime 年份。

    int GetYear();
    

    根據當地時間傳回 1970 年 1 月 1 日至 2038 年 1 月 18 日(含)。

    此函式會呼叫 GetLocalTm ,它會使用內部靜態配置的緩衝區。 因為呼叫其他 CTime 成員函式,因此會覆寫此緩衝區中的資料。

    請參閱 GetDay 範例。

    CTime::operator =

    指派運算子。

    CTime& operator=(__time64_t time) throw();
    新的日期/時間值。

    更新 CTime 的物件。

    這個多載指派運算子會將來源時間複製到這個 CTime 物件中。 物件中的 CTime 內部時間儲存區與時區無關。 指派期間不需要時區轉換。

    CTime::operator +, -

    這些運算子會加入和減去 CTimeSpanCTime 物件。

    CTime operator+(CTimeSpan timeSpan) const throw();
    CTime operator-(CTimeSpan timeSpan) const throw();
    CTimeSpan operator-(CTime time) const throw();
    

    timeSpan
    CTimeSpan要加入或減去的物件。

    CTime要減去的物件。

    CTimeCTimeSpan 物件,表示作業的結果。

    CTime 物件代表絕對時間, CTimeSpan 物件代表相對時間。 前兩個運算子可讓您在 物件中 CTime 加入和減去 CTimeSpan 物件。 第三個運算子可讓您從另一個物件減去一個 CTime 物件,以產生 CTimeSpan 物件。

    CTime t1(1999, 3, 19, 22, 15, 0); // 10:15 PM March 19, 1999
    CTime t2(1999, 3, 20, 22, 15, 0); // 10:15 PM March 20, 1999
    CTimeSpan ts = t2 - t1;             // Subtract 2 CTimes
    ATLASSERT(ts.GetTotalSeconds() == 86400L);
    ATLASSERT((t1 + ts) == t2);       // Add a CTimeSpan to a CTime.
    ATLASSERT((t2 - ts) == t1);       // Subtract a CTimeSpan from a CTime.   
    

    CTime::operator +=, -=

    這些運算子會將 物件新增和減去 CTimeSpan 到這個 CTime 物件。

    CTime& operator+=(CTimeSpan span) throw();
    CTime& operator-=(CTimeSpan span) throw();
    CTimeSpan要加入或減去的物件。

    更新 CTime 的物件。

    這些運算子可讓您在這個 物件中加入 CTime 和減去 CTimeSpan 物件。

    CTime t(1999, 3, 19, 22, 15, 0); // 10:15 PM March 19, 1999
    t += CTimeSpan(0, 1, 0, 0);      // 1 hour exactly
    ATLASSERT(t.GetHour() == 23);   
    

    CTime::Serialize64

    這個方法只能在 MFC 專案中使用。

    序列化與封存中成員變數相關聯的資料。

    CArchive& Serialize64(CArchive& ar);
    CArchive您要更新的物件。

    更新 CArchive 的物件。

    asctime_s、_wasctime_s
    _ftime_s、_ftime32_s、_ftime64_s
    gmtime_s、_gmtime32_s、_gmtime64_s
    localtime_s、_localtime32_s、_localtime64_s
    strftime、wcsftime、_strftime_l、_wcsftime_l
    time、_time32、_time64
    CTimeSpan 類別
    階層架構圖表
    ATL/MFC 共用類別

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

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

  •