日期和時間庫
來自 cppreference.com
< cpp
C++ 支援兩種時間操作
- chrono 庫,一個靈活的型別集合,以不同精度(例如,std::chrono::time_point)跟蹤時間。
- C 風格日期和時間庫(例如,std::time)。
目錄 |
[編輯] Chrono 庫 (自 C++11 起)
chrono 庫定義了幾種主要型別以及實用函式和常用 typedef
| (C++20 起) |
[編輯] 時鐘
時鐘由起始點(或紀元)和滴答速率組成。例如,時鐘可能有一個紀元是 1970 年 1 月 1 日,並且每秒滴答一次。C++ 定義了幾種時鐘型別
| 定義於標頭檔案
<chrono> | |
| 定義在名稱空間
std::chrono 中 | |
| (C++11) |
系統範圍即時時鐘的掛鐘時間 (類) |
| (C++11) |
永不調整的單調時鐘 (類) |
| (C++11) |
可用最短滴答週期的時鐘 (類) |
| (C++20) |
確定一個型別是否是 時鐘 (類模板) (變數模板) |
| (C++20) |
用於協調世界時 (UTC) 的 時鐘 (類) |
| (C++20) |
用於國際原子時 (TAI) 的 時鐘 (類) |
| (C++20) |
用於 GPS 時間的 時鐘 (類) |
| (C++20) |
用於 檔案時間的 時鐘 (typedef) |
| (C++20) |
表示本地時間的偽時鐘 (類) |
[編輯] 時間點
時間點是自特定時鐘紀元以來經過的時長。
| 定義於標頭檔案
<chrono> | |
| 定義在名稱空間
std::chrono 中 | |
| (C++11) |
時間中的一個點 (類模板) |
| (C++20) |
定義如何將一個時鐘的時間點轉換為另一個時鐘的時間點的特性類 (類模板) |
| (C++20) |
將一個時鐘的時間點轉換為另一個時鐘的時間點 (函式模板) |
[編輯] 時長
時長由一段時間跨度組成,定義為某個時間單位的某個滴答數。例如,“42 秒”可以由 42 個 1 秒時間單位的滴答組成的時長表示。
| 定義於標頭檔案
<chrono> | |
| 定義在名稱空間
std::chrono 中 | |
| (C++11) |
時間間隔 (類模板) |
[編輯] 時間 (自 C++20 起)
hh_mm_ss 將表示自午夜以來經過的時間的時長拆分為小時、分鐘、秒和適用的小數秒。它主要是一個格式化工具。
| 定義於標頭檔案
<chrono> | |
| 定義在名稱空間
std::chrono 中 | |
| (C++20) |
表示一天中的時間 (類模板) |
| (C++20) |
在 12 小時/24 小時格式之間轉換一天中的時間 (函式) |
[編輯] 日曆 (自 C++20 起)
| 定義於標頭檔案
<chrono> | |
| 定義在名稱空間
std::chrono 中 | |
| (C++20) |
表示月份中 最後一天 或最後一週日的標籤類 (類) |
| (C++20) |
表示月份中的一天 (類) |
| (C++20) |
表示年份中的一個月 (類) |
| (C++20) |
表示公曆中的一年 (類) |
| (C++20) |
表示公曆中的一週中的一天 (類) |
| (C++20) |
表示月份中的第 n 個 weekday (類) |
| (C++20) |
表示月份中的最後一個 weekday (類) |
| (C++20) |
表示特定 month 中的特定 day (類) |
| (C++20) |
表示特定 month 的最後一天 (類) |
| (C++20) |
表示特定 month 中的第 n 個 weekday (類) |
| (C++20) |
表示特定 month 中的最後一個 weekday (類) |
| (C++20) |
表示特定 year 中的特定 month (類) |
| (C++20) |
表示特定的 year、month 和 day (類) |
| (C++20) |
表示特定 year 和 month 的最後一天 (類) |
| (C++20) |
表示特定 year 和 month 中的第 n 個 weekday (類) |
| (C++20) |
表示特定 year 和 month 中的最後一個 weekday (類) |
| (C++20) |
格里高利曆日期建立的傳統語法 (函式) |
[編輯] 時區 (自 C++20 起)
| 定義於標頭檔案
<chrono> | |
| 定義在名稱空間
std::chrono 中 | |
| (C++20) |
描述 IANA 時區資料庫 的副本 (類) |
| (C++20) |
表示 tzdb 的連結串列 (類) |
| 訪問和控制全域性時區資料庫資訊 (函式) | |
| (C++20) |
根據名稱定位 time_zone (函式) |
| (C++20) |
返回當前的 time_zone (函式) |
| (C++20) |
表示一個時區 (類) |
| (C++20) |
表示特定時間點關於時區的資訊 (類) |
| (C++20) |
表示有關本地時間到 UNIX 時間轉換的資訊 (類) |
| (C++20) |
選擇如何解決模糊的本地時間 (列舉) |
| (C++20) |
用於 zoned_time 所使用的時區指標的特性類 (類模板) |
| (C++20) |
表示時區和時間點 (類) |
| (C++20) |
包含有關閏秒插入的資訊 (類) |
| (C++20) |
閏秒插入資訊 (類) |
| (C++20) |
從 utc_time 物件獲取閏秒插入資訊(函式模板) |
| (C++20) |
表示時區的別名 (類) |
| (C++20) |
報告本地時間不存在時丟擲的異常 (類) |
| (C++20) |
報告本地時間模糊時丟擲的異常 (類) |
[編輯] 字面量 (自 C++14 起)
| 定義於標頭檔案
<chrono> | |
| 在內聯名稱空間
std::literals::chrono_literals 中定義 | |
| (C++20) |
表示特定年份的 std::chrono::year 字面量 (函式) |
| (C++20) |
表示月份中某天的 std::chrono::day 字面量 (函式) |
| (C++14) |
表示小時的 std::chrono::duration 字面量 (函式) |
| (C++14) |
表示分鐘的 std::chrono::duration 字面量 (函式) |
| (C++14) |
表示秒的 std::chrono::duration 字面量 (函式) |
| (C++14) |
表示毫秒的 std::chrono::duration 字面量 (函式) |
| (C++14) |
表示微秒的 std::chrono::duration 字面量 (函式) |
| (C++14) |
表示納秒的 std::chrono::duration 字面量 (函式) |
[編輯] Chrono I/O (自 C++20 起)
| 定義於標頭檔案
<chrono> | |
| 定義在名稱空間
std::chrono 中 | |
| (C++20) |
從流解析 chrono 物件(函式模板) |
[編輯] 注意
| 特性測試宏 | 值 | 標準 | 特性 |
|---|---|---|---|
__cpp_lib_chrono |
201510L |
(C++17) | std::chrono::duration 和 std::chrono::time_point 的舍入函式 |
201611L |
(C++17) | constexpr 用於 std::chrono::duration 和 std::chrono::time_point 的所有成員函式 | |
201907L |
(C++20) | 日曆 和 時區 | |
202306L |
(C++26) | 對 std::chrono 值類的 雜湊 支援 |
[編輯] C 風格日期和時間庫
還提供了 C 風格的日期和時間函式,例如 std::time_t、std::difftime 和 CLOCKS_PER_SEC。
[編輯] 示例
執行此程式碼
#include <chrono> #include <iostream> long Fibonacci(unsigned n) { return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2); } int main() { // Measures and displays an execution time of a function call. const auto start{std::chrono::steady_clock::now()}; const auto fb{Fibonacci(42)}; const auto finish{std::chrono::steady_clock::now()}; const std::chrono::duration<double> elapsed_seconds{finish - start}; std::cout << "Fibonacci(42): " << fb << "\nElapsed time: "; // std::cout << elapsed_seconds.count() << "s\n"; // Before C++20 std::cout << elapsed_seconds << '\n'; // C++20's chrono::duration operator<< // Prints UTC and local time. const auto tp_utc{std::chrono::system_clock::now()}; std::cout << "Current time 'UTC' is: " << tp_utc << "\n" "Current time 'Local' is: " << std::chrono::current_zone()->to_local(tp_utc) << '\n'; }
可能的輸出
Fibonacci(42): 267914296 Elapsed time: 0.728532s Current time 'UTC' is: 2025-02-10 06:22:39.420666960 Current time 'Local' is: 2025-02-10 09:22:39.420666960