本文主要介紹 std::chrono日期和時間用法。 演示環境: vs2017
1 #include 2 #include // 如果需要使用執行緒其表示一段時間,可以是這段時間單位可以是秒、分鐘、小時、微秒,可以在這裡看到詳情(突然抽風,上不去了),無法貼出相關定義原始碼了。
乙個例子,執行緒休眠2秒:
std::this_thread::sleep_for(std::chrono::seconds(2));與之對應還有 nanoseconds、microseconds、milliseconds、minutes、hours。 因為看不到網頁內容,湊合看下vs2017中chrono檔案中的定義吧。
1(類)模板! 具體的定義,大家可以去 msdn 看看或者 cppreference 看看,這裡主要介紹的是用法。using nanoseconds = duration
long, nano>;
2using microseconds = duration
long, micro>;
3using milliseconds = duration
long, milli>;
4using seconds = duration
long>;
5using minutes = duration>;
6using hours = duration>;
函式【std::this_thread::sleep_for】的引數需要乙個std::chrono的乙個時間段。 比如,定義乙個時間段:
1std::chrono 類還提供了關於數值的運算,包括: +、-、-=、+=、/、*、/=、 *= 等。//5秒
2 std::chrono::seconds second(5);3
//2毫秒
4 std::chrono::microseconds micro_seconds(2);
乙個例子,生活中常見的是小時、分、秒,這裡舉例分鐘和秒做運算。
1這裡,用 2分鐘 減 50 秒, 結果為 70秒。 呼叫 std::chrono::count() 獲取時鐘週期://50秒
2 std::chrono::seconds second_50(50);3
//2mins
4 std::chrono::minutes minute_2(2);5
6//用秒儲存結果
7 std::chrono::seconds ret_val = minute_2 -second_50;89
//輸出當前結果
10 std::cout << ret_val.count();
還可以將 秒 轉為 其他 格式輸出,比如,秒轉分鐘,需要函式 std::chrono::duration_cast<>() 幫忙。 用法如下:
std::cout << "注意: 這裡得到的是 整數。比如,這裡的結果, 70秒, 轉為分鐘, 結果顯示 1分鐘。ret_val =
"<< std::chrono::duration_cast(ret_val).count();
翻看 duration時,看到下面還有 time_point。 如名,其表示乙個時間點,單位: 秒。 起始時間是 1970.1.1 00:00:00 。這樣,咱們可以分方便的計算 自 1970.1.1 00:00:00 後的當 某個時間點與 1970.1.1 00:00:00的間隔時間了。
其宣告如下(來自vs2017,其定義太長,有興趣的可以了解下,這裡僅給出定義):
template它也是乙個類模板,且需要搭配 duration和clock使用。_clock,
class _duration = typename _clock::duration>
class time_point;
chrono提供了兩種的clock:
a、system_clock - 系統時間,系統時間可能被修改
b、steady_clock - 記錄時間,不會被修改。 換而言之,記錄的是已經流逝的真正時間。
通常,獲取當前時間點**:
std::chrono::steady_clock::time_point tp1 = std::chrono::steady_clock::now();time_point類也提供了算數運算: += 、-=
乙個例子:計算兩個時間點之間的間隔
1 std::chrono::steady_clock::time_point tp1 =std::chrono::steady_clock::now();2//結果:do something , 執行緒睡眠2秒
3 std::this_thread::sleep_for(std::chrono::seconds(2
));4 std::chrono::steady_clock::time_point tp2 =std::chrono::steady_clock::now();
56 std::cout << "
time_interval =
"<< std::chrono::duration_cast(tp2 - tp1).count() << "
\n";
c 11中的日期和時間庫
c 11提供了日期時間相關的庫chrono,通過chrono相關的庫我們可以很方便的處理日期和時間。c 11還提供了字串的寬窄轉換功能,也提供了字串和數字的相互轉換的庫。有了這些庫提供的便利的工具類,我們能方便的處理日期和時間相關的轉換和格式輸出。chrono庫主要包含了三種型別 時間間隔durat...
c 之日期時間
c 標準庫沒有提供所謂的日期型別。c 繼承了 c 語言用於日期和時間操作的結構和函式。為了使用日期和時間相關的函式和結構,需要在 c 程式中引用 標頭檔案。有四個與時間相關的型別 clock t time t size t和tm。型別 clock t size t 和 time t 能夠把系統時間和...
c 11 處理時間和日期
c 11提供了日期時間相關的庫 chrono,通過chrono庫可以很方便的處理日期和時間。1.記錄時間長度的duration template class duration 第乙個模板引數rep是乙個數值型別,表示時鐘數的型別 第二個模板引數是乙個預設模板引數 std ratio,表示時鐘週期。t...