c 11之日期和時間庫

2022-06-23 01:51:16 字數 2926 閱讀 1364

本文主要介紹 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

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>;

(類)模板! 具體的定義,大家可以去 msdn 看看或者 cppreference  看看,這裡主要介紹的是用法。

函式【std::this_thread::sleep_for】的引數需要乙個std::chrono的乙個時間段。 比如,定義乙個時間段:

1

//5秒

2 std::chrono::seconds second(5);3

//2毫秒

4 std::chrono::microseconds micro_seconds(2);

std::chrono 類還提供了關於數值的運算,包括: +、-、-=、+=、/、*、/=、 *= 等。 

乙個例子,生活中常見的是小時、分、秒,這裡舉例分鐘和秒做運算。

1

//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();

這裡,用 2分鐘  減 50 秒, 結果為 70秒。 呼叫 std::chrono::count() 獲取時鐘週期:

還可以將 秒 轉為 其他 格式輸出,比如,秒轉分鐘,需要函式  std::chrono::duration_cast<>() 幫忙。 用法如下:

std::cout << "

ret_val =

"<< std::chrono::duration_cast(ret_val).count();

注意: 這裡得到的是 整數。比如,這裡的結果, 70秒, 轉為分鐘, 結果顯示 1分鐘。 

翻看 duration時,看到下面還有 time_point。 如名,其表示乙個時間點,單位: 秒。 起始時間是 1970.1.1 00:00:00 。這樣,咱們可以分方便的計算 自 1970.1.1 00:00:00 後的當 某個時間點與 1970.1.1 00:00:00的間隔時間了。

其宣告如下(來自vs2017,其定義太長,有興趣的可以了解下,這裡僅給出定義):

template

_clock,

class _duration = typename _clock::duration>

class time_point;

它也是乙個類模板,且需要搭配 duration和clock使用。

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...