核心概念
- Duration(時長):表示時間跨度,如 1 分鐘、2 小時、10 毫秒。模板
duration,Rep 為計數類型,Period 為刻度(如 std::milli)。
- Time Point(時間點):相對於某個紀元的時長。模板
time_point。
- Clock(時鐘):提供當前時間點。標準庫提供三種:
system_clock(系統實時鐘,可映射到日曆時間),
steady_clock(單調遞增,適合計時),
high_resolution_clock(最高精度,可能是上述兩者的別名)。
常用操作示例
1. 時長運算與轉換
using namespace std::chrono;
hours h(24); // 24 小時
minutes m = duration_cast(h); // 1440 分鐘
milliseconds ms = h; // 隱式轉換(精度提升)
cout << ms.count() << "ms"; // 86400000
2. 獲取當前時間點並格式化輸出
auto now = system_clock::now();
time_t tt = system_clock::to_time_t(now);
cout << ctime(&tt); // 如 "Wed Jan 14 10:37:00 2016\n"
3. 精確測量代碼執行時間
auto t1 = high_resolution_clock::now();
// ... 待測代碼 ...
auto t2 = high_resolution_clock::now();
duration elapsed = t2 - t1;
cout << "耗時: " << elapsed.count() << " 秒";
4. 自定義時長單位
using shakes = duration>; // 1 shake = 10ns
shakes s(100); // 100 shakes = 1 微秒
注意事項
system_clock 可能被用戶調整系統時間導致倒退,計時請用 steady_clock。
duration_cast 只能向低精度轉換(截斷),向高精度可隱式轉換。
- C++20 引入
std::chrono::zoned_time、format 等更強大的日曆/時區功能。