選單
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C++ 教程

C++ 主頁 C++ 簡介 C++ 入門 C++ 語法 C++ 輸出 C++ 註釋 C++ 變數 C++ 使用者輸入 C++ 資料型別 C++ 運算子 C++ 字串 C++ 數學 C++ 布林值 C++ If...Else C++ Switch C++ While 迴圈 C++ For 迴圈 C++ Break/Continue C++ 陣列 C++ 結構體 C++ 列舉 C++ 引用 C++ 指標

C++ 函式

C++ 函式 C++ 函式引數 C++ 函式過載 C++ 作用域 C++ 遞迴

C++ 類

C++ OOP C++ 類/物件 C++ 類方法 C++ 建構函式 C++ 訪問修飾符 C++ 封裝 C++ 繼承 C++ 多型 C++ 檔案 C++ 異常 C++ 日期

C++ 資料結構

C++ 資料結構與 STL C++ Vectors C++ List C++ Stacks C++ Queues C++ Deque C++ Sets C++ Maps C++ 迭代器 C++ 演算法

C++ How To

C++ 兩數相加 C++ 隨機數

C++ 參考

C++ 參考 C++ 關鍵字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 示例

C++ 示例 C++ 現實生活中的例子 C++ 編譯器 C++ 練習 C++ 測驗 C++ 證書


C++ 日期和時間


日期和時間

<ctime> 庫允許我們處理日期和時間。

要使用它,您必須匯入 <ctime> 標頭檔案

示例

#include <ctime> // Import the ctime library

顯示當前日期和時間

<ctime> 庫提供了各種函式來測量日期和時間。

time() 函式為我們提供一個表示當前日期和時間的時間戳。我們可以使用 ctime() 函式來顯示時間戳所代表的日期和時間

示例

顯示當前日期

// Get the timestamp for the current date and time
time_t timestamp;
time(&timestamp);

// Display the date and time represented by the timestamp
cout << ctime(&timestamp);
自己動手試一試 »

使用 time() 函式的兩種方式

time() 函式將時間戳寫入引數給定的記憶體位置,但它也返回時間戳的值。

使用 time() 函式的另一種方法是傳入一個 NULL 指標,並改用返回值。

time_t timestamp = time(NULL);

資料型別

有兩種不同的資料型別用於儲存日期和時間:用於時間戳time_t 和用於日期時間結構struct tm

時間戳將時間點表示為單個數字,這使得計算機更容易進行計算。

日期時間結構是表示日期和時間不同組成部分作為成員的結構體。這使得我們更容易指定日期。日期時間結構具有以下成員:

  • tm_sec - 分鐘內的秒數
  • tm_min - 小時內的分鐘數
  • tm_hour - 一天中的小時數(從 0 到 23)
  • tm_mday - 月份中的日期
  • tm_mon - 月份(從 0 到 11,1 月為 0)
  • tm_year - 自 1900 年以來的年數
  • tm_wday - 星期幾(從 0 到 6,星期日為 0)
  • tm_yday - 一年中的天數(從 0 到 365,1 月 1 日為 0)
  • tm_isdst - 夏令時生效時為正,不生效時為零,未知時為負

請務必記住日期組成部分的表示方式

  • 小時以 24 小時製表示。晚上 11 點將表示為 23
  • 月份從 0 到 11。例如,12 月將表示為 11 而不是 12。
  • 年份相對於 1900 年表示。2024 年將表示為 124,因為自 1900 年以來已經過去了 124 年。

建立時間戳

time() 函式只能為當前日期建立時間戳,但我們可以使用 mktime() 函式為任何日期建立時間戳。

mktime() 函式將日期時間結構轉換為時間戳。

示例

使用 mktime() 函式建立時間戳

struct tm datetime;
time_t timestamp;

datetime.tm_year = 2023 - 1900; // Number of years since 1900
datetime.tm_mon = 12 - 1; // Number of months since January
datetime.tm_mday = 17;
datetime.tm_hour = 12;
datetime.tm_min = 30;
datetime.tm_sec = 1;
// Daylight Savings must be specified
// -1 uses the computer's timezone setting
datetime.tm_isdst = -1;

timestamp = mktime(&datetime);

cout << ctime(&timestamp);
自己動手試一試 »

注意:mktime() 函式需要這些成員具有值:tm_yeartm_montm_mdaytm_hourtm_mintm_sectm_isdst


建立日期時間結構

mktime() 函式還會用正確的值填充日期時間結構的 tm_wdaytm_yday 成員,從而完成結構並提供有效的日期時間。例如,它可用於查詢給定日期的星期幾

示例

查詢指定日期的星期幾

// Create the datetime structure and use mktime to fill in the missing members
struct tm datetime;
datetime.tm_year = 2023 - 1900; // Number of years since 1900
datetime.tm_mon = 12 - 1; // Number of months since January
datetime.tm_mday = 17;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);

string weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

cout << "The date is on a " << weekdays[datetime.tm_wday];
自己動手試一試 »

localtime()gmtime() 函式可以將時間戳轉換為日期時間結構。

localtime() 函式返回一個指向表示計算機時區時間的結構的指標。

gmtime() 函式返回一個指向表示 GMT 時區時間的結構的指標。

這些函式返回一個指向日期時間結構的指標。如果我們想確保其值不會意外更改,我們應該透過解引用指標來複制它。要了解解引用,請參閱 C++ 解引用教程

示例

獲取日期時間結構並輸出當前小時

time_t timestamp = time(&timestamp);
struct tm datetime = *localtime(&timestamp);

cout << datetime.tm_hour;
自己動手試一試 »


顯示日期

到目前為止,我們一直使用 ctime() 函式來顯示時間戳中包含的日期。要從日期時間結構顯示日期,我們可以使用 asctime() 函式。

示例

顯示日期時間結構表示的日期

time_t timestamp = time(NULL);
struct tm datetime = *localtime(&timestamp);

cout << asctime(&datetime);
自己動手試一試 »

注意:asctime() 函式不會糾正無效日期。例如,如果您將月份中的日期設定為 32,它將顯示 32。mktime() 函式可以糾正這些型別的錯誤

示例

在顯示日期之前糾正它

// Create the datetime structure and use mktime to correct mistakes
struct tm datetime;
datetime.tm_year = 2022 - 1900; // Number of years since 1900
datetime.tm_mon = 0; // 0 is January
datetime.tm_mday = 32;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);

cout << asctime(&datetime);
自己動手試一試 »

ctime()asctime() 函式允許我們顯示日期,但它們不允許我們選擇如何顯示它。

要選擇如何顯示日期,我們可以使用 strftime() 函式。

示例

以不同方式表示當前日期

time_t timestamp = time(NULL);
struct tm datetime = *localtime(&timestamp);

char output[50];

strftime(output, 50, "%B %e, %Y", &datetime);
cout << output << "\n";

strftime(output, 50, "%I:%M:%S %p", &datetime);
cout << output << "\n";

strftime(output, 50, "%m/%d/%y", &datetime);
cout << output << "\n";

strftime(output, 50, "%a %b %e %H:%M:%S %Y", &datetime);
cout << output << "\n";
自己動手試一試 »

strftime() 函式格式化日期並將其作為 C 風格字串寫入 char 陣列。它有四個引數

  1. 第一個引數指向將寫入格式化日期的字元陣列。
  2. 第二個引數指定陣列中可用的空間。
  3. 第三個引數允許我們使用格式說明符選擇如何格式化日期。
  4. 最後一個引數是指向包含我們要顯示日期的日期時間結構的指標。

下表列出了一些有用的格式說明符。有關更完整的列表,請檢視 strftime() 參考頁面

格式說明符 描述 示例
%a 星期幾的短表示 星期五
%b 月份名稱的短表示 Dec
%B 月份名稱的完整表示 十二月
%d 月份中的日期,帶前導零 09
%e 月份中的日期,帶前導空格  9
%H 小時的 24 小時制 14
%I 小時的 12 小時制 02
%M 小時內的分鐘數 30
%p AM 或 PM PM
%S 分鐘內的秒數 01
%y 2 位年份表示 23
%Y 4 位年份表示 2023

測量時間

有兩種不同的函式可用於測量時間差。

difftime() 函式測量兩個不同時間戳之間經過的秒數。這在測量日期之間的時間差時很有用。

示例

測量兩個時間戳之間的時間差

time_t now;
time_t nextyear;
struct tm datetime;

now = time(NULL);
datetime = *localtime(&now);
datetime.tm_year = datetime.tm_year + 1;
datetime.tm_mon = 0;
datetime.tm_mday = 1;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.is_dst = -1;
nextyear = mktime(&datetime);

int diff = difftime(nextyear, now);

cout << diff << " seconds until next year";
自己動手試一試 »

clock() 函式對於在程式執行時測量短時間間隔很有用。它比 difftime() 函式更精確。

每次呼叫 `clock` 函式都會返回一種特殊型別的時間戳,以時鐘(一個取決於庫實現方式的時間單位)為單位,其資料型別為 `clock_t`。要測量時間差,請在兩個不同時間點儲存一個時間戳,然後將其相減。時間差以時鐘為單位測量,但可以透過將其除以 `CLOCKS_PER_SEC` 常量將其轉換為秒。

示例

測量程式執行所需的時間

clock_t before = clock();
int k = 0;
for(int i = 0; i < 100000; i++) {
  k += i;
}
clock_t duration = clock() - before;
cout << "Duration: " << (float)duration / CLOCKS_PER_SEC << " seconds";
自己動手試一試 »

注意:請務必在除法之前將值轉換為 floatdouble 型別,否則可能會導致整數除法,從而截斷小數部分。


完整的 <ctime> 參考

有關 <ctime> 函式的完整參考,請訪問我們的 C++ ctime 參考



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援