C/C++ chrono簡(jiǎn)單使用場(chǎng)景示例詳解
chrono使用場(chǎng)景舉例
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>
庫(kù)獲取當(dāng)前時(shí)間并生成帶毫秒的時(shí)間戳字符串。
獲取當(dāng)前時(shí)間點(diǎn)
auto now = std::chrono::system_clock::now();
system_clock::now()
: 獲取當(dāng)前系統(tǒng)時(shí)間點(diǎn)(UTC時(shí)間)- 返回類型:
std::chrono::system_clock::time_point
轉(zhuǎn)換為C風(fēng)格時(shí)間
auto t = std::chrono::system_clock::to_time_t(now);
to_time_t()
: 將time_point
轉(zhuǎn)換為time_t
(自1970-01-01起經(jīng)過(guò)的秒數(shù))- 用于后續(xù)調(diào)用傳統(tǒng)C時(shí)間函數(shù)
提取毫秒部分
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>( now.time_since_epoch() ) % 1000;
time_since_epoch()
: 獲取從時(shí)鐘紀(jì)元到now
的時(shí)間間隔duration_cast<milliseconds>
: 將時(shí)間間隔轉(zhuǎn)換為毫秒精度% 1000
: 取模運(yùn)算獲取當(dāng)前秒內(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)換為本地時(shí)間的tm
結(jié)構(gòu)put_time(..., "%F %T")
: 格式化為YYYY-MM-DD HH:MM:SS
%F
等價(jià)于%Y-%m-%d
%T
等價(jià)于%H:%M:%S
ms.count()
: 獲取毫秒數(shù)值(整數(shù))setw(3)
+setfill('0')
: 確保毫秒固定3位(如5→"005")
最終輸出格式YYYY-MM-DD HH:MM:SS.sss
示例:2023-10-05 14:30:45.123
注意事項(xiàng)
線程安全性: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>
庫(kù)提供更簡(jiǎn)潔的時(shí)間格式化:
auto now = std::chrono::system_clock::now(); return std::format("{:%Y-%m-%d %H:%M:%S}", now);
精度控制:
當(dāng)前代碼精確到毫秒,如需微秒/納秒:
// 微秒示例 auto us = std::chrono::duration_cast<std::chrono::microseconds>( now.time_since_epoch() ) % 1000000;
到此這篇關(guān)于C/C++ chrono簡(jiǎn)單使用場(chǎng)景示例詳解的文章就介紹到這了,更多相關(guān)C++ chrono使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++中std::chrono時(shí)間庫(kù)的全面解析
- 關(guān)于C++使用std::chrono獲取當(dāng)前秒級(jí)/毫秒級(jí)/微秒級(jí)/納秒級(jí)時(shí)間戳問(wèn)題
- C++?std::chrono庫(kù)使用示例(實(shí)現(xiàn)C++?獲取日期,時(shí)間戳,計(jì)時(shí)等功能)
- C++11中的chrono庫(kù)詳解
- C++ Boost Chrono實(shí)現(xiàn)計(jì)時(shí)碼表流程詳解
- c++11 chrono全面解析(最高可達(dá)納秒級(jí)別的精度)
- C++11中的時(shí)間庫(kù)std::chrono(引發(fā)關(guān)于時(shí)間的思考)
- C++中Boost.Chrono時(shí)間庫(kù)的使用方法
相關(guān)文章
深入理解C++模板如何實(shí)現(xiàn)多態(tài)思想
這篇文章主要為大家詳細(xì)介紹了C++模板如何實(shí)現(xiàn)多態(tài)的相關(guān)資料,文中的示例代碼講解詳細(xì),對(duì)我們深入了解C++有一定的幫助,感興趣的可以了解一下2023-03-03數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
本篇文章是對(duì)在c語(yǔ)言中用棧實(shí)現(xiàn)表達(dá)式求值的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語(yǔ)言入門學(xué)習(xí)之fgets()函數(shù)和fputs()函數(shù)
fgetc() 和 fputc() 函數(shù)每次只能讀寫一個(gè)字符,速度較慢,實(shí)際開發(fā)中往往是每次讀寫一個(gè)字符串或者一個(gè)數(shù)據(jù)塊,這樣能明顯提高效率,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言入門學(xué)習(xí)之fgets()函數(shù)和fputs()函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-11-11C語(yǔ)言實(shí)現(xiàn)商品管理系統(tǒng)開發(fā)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)商品管理系統(tǒng)開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08