C/C++ chrono簡單使用場景示例詳解
chrono使用場景舉例
1 輸出格式化字符串
示例代碼
auto now = std::chrono::system_clock::now();
auto t = std::chrono::system_clock::to_time_t(now);
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
std::ostringstream oss;
oss << std::put_time(std::localtime(&t), "%F %T")
<< "." << std::setw(3) << std::setfill('0') << ms.count();這段代碼使用C++11的<chrono>庫獲取當前時間并生成帶毫秒的時間戳字符串。
獲取當前時間點
auto now = std::chrono::system_clock::now();
system_clock::now(): 獲取當前系統(tǒng)時間點(UTC時間)- 返回類型:
std::chrono::system_clock::time_point
轉(zhuǎn)換為C風格時間
auto t = std::chrono::system_clock::to_time_t(now);
to_time_t(): 將time_point轉(zhuǎn)換為time_t(自1970-01-01起經(jīng)過的秒數(shù))- 用于后續(xù)調(diào)用傳統(tǒng)C時間函數(shù)
提取毫秒部分
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
now.time_since_epoch()
) % 1000;time_since_epoch(): 獲取從時鐘紀元到now的時間間隔duration_cast<milliseconds>: 將時間間隔轉(zhuǎn)換為毫秒精度% 1000: 取模運算獲取當前秒內(nèi)的毫秒數(shù)(0-999)
格式化輸出
oss << std::put_time(std::localtime(&t), "%F %T")
<< "." << std::setw(3) << std::setfill('0') << ms.count();localtime(&t): 將time_t轉(zhuǎn)換為本地時間的tm結(jié)構(gòu)put_time(..., "%F %T"): 格式化為YYYY-MM-DD HH:MM:SS%F等價于%Y-%m-%d%T等價于%H:%M:%Sms.count(): 獲取毫秒數(shù)值(整數(shù))setw(3)+setfill('0'): 確保毫秒固定3位(如5→"005")
最終輸出格式YYYY-MM-DD HH:MM:SS.sss
示例:2023-10-05 14:30:45.123
注意事項
線程安全性:std::localtime不是線程安全的(使用靜態(tài)緩沖區(qū))。多線程環(huán)境下應(yīng)改用:
std::tm tm_buf; localtime_r(&t, &tm_buf); // POSIX // 或 localtime_s(&tm_buf, &t); // Windows
C++20替代方案:
C++20的<chrono>庫提供更簡潔的時間格式化:
auto now = std::chrono::system_clock::now();
return std::format("{:%Y-%m-%d %H:%M:%S}", now);精度控制:
當前代碼精確到毫秒,如需微秒/納秒:
// 微秒示例
auto us = std::chrono::duration_cast<std::chrono::microseconds>(
now.time_since_epoch()
) % 1000000;到此這篇關(guān)于C/C++ chrono簡單使用場景示例詳解的文章就介紹到這了,更多相關(guān)C++ chrono使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-用棧實現(xiàn)表達式求值的方法詳解
本篇文章是對在c語言中用棧實現(xiàn)表達式求值的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05
C語言入門學習之fgets()函數(shù)和fputs()函數(shù)
fgetc() 和 fputc() 函數(shù)每次只能讀寫一個字符,速度較慢,實際開發(fā)中往往是每次讀寫一個字符串或者一個數(shù)據(jù)塊,這樣能明顯提高效率,這篇文章主要給大家介紹了關(guān)于C語言入門學習之fgets()函數(shù)和fputs()函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-11-11

