首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 日期與時間處理:ctime 函式庫、tm 結構與格式化輸出

     編輯:C++ 入門

C++ 日期與時間處理:ctime 函式庫、tm 結構與格式化輸出

C++ 標準程式庫無內建日期型別,繼承 C 語言的 <ctime> 函式庫進行日期時間操作。核心型別包括 time_t(日曆時間)、clock_t(處理器時間)、tm 結構(分解時間)。

關鍵型別與 tm 結構

struct tm {
    int tm_sec;   // 秒 [0,61]
    int tm_min;   // 分 [0,59]
    int tm_hour;  // 時 [0,23]
    int tm_mday;  // 日 [1,31]
    int tm_mon;   // 月 [0,11] (0=一月)
    int tm_year;  // 年 (自1900年起)
    int tm_wday;  // 星期 [0,6] (0=星期日)
    int tm_yday;  // 年內天數 [0,365]
    int tm_isdst; // 夏令時旗標
};

常用函式速查表

函式說明
time_t time(time_t*)取得自 1970-01-01 00:00:00 UTC 至今的秒數
char* ctime(const time_t*)將 time_t 轉為可讀字串(本地時間)
tm* localtime(const time_t*)轉為本地時間 tm 結構
tm* gmtime(const time_t*)轉為 UTC 時間 tm 結構
char* asctime(const tm*)將 tm 結構轉為可讀字串
time_t mktime(tm*)將 tm 結構轉為 time_t(並修正欄位)
double difftime(time_t, time_t)計算兩時間差(秒)
size_t strftime(...)格式化日期時間為指定字串
clock_t clock()取得程式啟動至今的處理器時鐘數

範例 1:取得當前本地時間與 UTC 時間

#include <iostream>
#include <ctime>
using namespace std;

int main() {
    time_t now = time(0);
    char* dt = ctime(&now);
    cout << "本地日期時間:" << dt << endl;

    tm* gmtm = gmtime(&now);
    dt = asctime(gmtm);
    cout << "UTC 日期時間:" << dt << endl;
    return 0;
}

輸出範例:

本地日期時間:Sat Jan 8 20:07:41 2011
UTC 日期時間:Sun Jan 9 03:07:41 2011

範例 2:使用 tm 結構解析時間元件

#include <iostream>
#include <ctime>
using namespace std;

int main() {
    time_t now = time(0);
    cout << "自 1970 年秒數:" << now << endl;

    tm* ltm = localtime(&now);
    cout << "Year: "  << 1900 + ltm->tm_year << endl;
    cout << "Month: " << 1 + ltm->tm_mon     << endl;
    cout << "Day: "   << ltm->tm_mday        << endl;
    cout << "Time: "  << ltm->tm_hour << ":"
         << ltm->tm_min  << ":" << ltm->tm_sec << endl;
    return 0;
}

輸出範例:

自 1970 年秒數:1294548238
Year: 2011
Month: 1
Day: 8
Time: 22:44:59

格式化輸出:strftime

依格式字串產生自訂日期時間字串,常用格式代碼:

  • %Y 四位數年、%m 雙位數月、%d 雙位數日
  • %H 24制時、%M 分、%S 秒
  • %c 標準日期時間表示
char buffer[80];
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", ltm);
cout << "格式化:" << buffer << endl;

注意事項

  • ctime/asctime 回傳靜態緩衝區指標,後續呼叫會覆蓋,需立即複製或使用。
  • localtime/gmtime 亦回傳靜態 tm 指標,執行緒不安全;C++11 起可用 localtime_s/gmtime_s 或 <chrono> 現代化 API。
  • tm_year 為距 1900 年數,tm_mon 0-11,輸出時需 +1900/+1。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved