亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++日期與時間 chrono庫介紹及使用教程

 更新時間:2023年12月14日 10:30:35   作者:橙皮^-^  
chrono庫是C++11中的一個標準庫,它提供了一系列與時間相關(guān)的類和函數(shù),用于表示和處理時間間隔,時鐘和時間點,C++20新增Calendar,這篇文章主要介紹了C++日期與時間 chrono庫介紹及使用,需要的朋友可以參考下

一、unix timestamp:時間戳

定義

時間戳是計算中廣泛使用的日期和時間表示形式。它通過自1970年1月1(Unix 紀元)00:00:00 UTC以來經(jīng)過的秒數(shù)(秒是毫秒、微妙、納秒的總稱)來測量時間,沒有因閏秒而進行調(diào)整。

二、chrono庫的主要組成

chrono庫是C++11中的一個標準庫,它提供了一系列與時間相關(guān)的類和函數(shù),用于表示和處理時間間隔,時鐘和時間點,C++20新增Calendar。

chrono庫主要包含了以下四種類型:

2.1 Duration

  • Duration(時間間隔):表示一段時間的長度,由一個數(shù)值(以下_Rep數(shù)值類型)和一個單位(ratio)組成,可以用于表示網(wǎng)絡(luò)時延、程序執(zhí)行耗時等
//define in std::chrono namspace
    /// `chrono::duration` represents a distance between two points in time
    template<typename _Rep, typename _Period = ratio<1>>
      class duration;
			//庫中預(yù)先定義了常用的時間長度
  • count --成員函數(shù) 返回周期的統(tǒng)計數(shù)值
  • std::chrono::duration_cast 類型轉(zhuǎn)換方法
  • 例子
  std::chrono::seconds d1(100);
  std::chrono::seconds d2(50);
  //d1: 100 d2: 50
  std::cout << "d1: " << d1.count()  << " d2: " << d2.count() << std::endl;
  std::chrono::seconds d3 = d1 - d2; //同單位基本計算
  std::cout << "d3: " << d3.count() << std::endl; //d3: 50
 //std::chrono::duration_cast 使用
   std::chrono::milliseconds m = std::chrono::duration_cast<std::chrono::milliseconds>(d1);
  //100s == 100000ms
  std::cout << "100s == " << m.count() << "ms" << std::endl;
 //其他用法,當(dāng)前線程休眠 1s sleep_for 需要加 #include<thread>
  std::this_thread::sleep_for(std::chrono::seconds(1));

2.2 Clock

  • 時鐘(clock):表示一個可以測量時間的設(shè)備,提供了當(dāng)前時間點(now)和時間點之間的差值(time_since_epoch)等方法。chrono庫提供了三種時鐘,分別是:
    • 系統(tǒng)時鐘(system_clock):表示當(dāng)前系統(tǒng)范圍的實時日歷時鐘,通常與系統(tǒng)的鐘同步。它可以用于表示日期和時間,以及與其他系統(tǒng)交互。
    • 穩(wěn)定時鐘(steady_clock):表示一個單調(diào)遞增的時鐘,不受系統(tǒng)時間的調(diào)整或修改影響。它可以用于測量時間間隔,以及實現(xiàn)定時器和延時等功能。
    • 高分辨率時鐘(high_resolution_clock):表示一個具有最高精度的時鐘,通常是系統(tǒng)時鐘或穩(wěn)定時鐘的別名(using high_resolution_clock = system_clock;)。它可以用于測量極短的時間間隔,以及實現(xiàn)性能分析等功能。
  • now --成員函數(shù),放回當(dāng)前時鐘的時間點

2.3 TimePoint

  • 時間點(time_point):表示一個特定時刻,由一個時鐘和一個時間間隔組成。例如,std::chrono::system_clock::now()表示系統(tǒng)時鐘的當(dāng)前時間點,std::chrono::steady_clock::now()表示穩(wěn)定時鐘的當(dāng)前時間點,等等。chrono庫還提供了一些常用的時間點別名,如std::chrono::system_clock::time_point,std::chrono::steady_clock::time_point,std::chrono::high_resolution_clock::time_point等。
  • time_since_epoch 返回到epoch的時間間隔Duration

2.4 Calendar(c++20)

  • 日期類,用來對日期時間進行比較。
  using namespace std::chrono_literals;
  //使用字面量 ""y ""d(C++20) 
  auto ymd1 = 2023y / std::chrono::November / 10d; // 2023-11-10
  auto ymd2 = 2023y / std::chrono::September / 10d; // 2023-9-10
  if(ymd1 > ymd2) {
 // ymd1 > ymd2
    std::cout << "ymd1 > ymd2" << std::endl;
  }

三、常見用法

3.1 獲取當(dāng)前系統(tǒng)時間戳

  //獲取系統(tǒng)時間戳,實例化系統(tǒng)時鐘
  std::chrono::system_clock clock;
  std::chrono::system_clock::time_point now = clock.now();
  std::chrono::_V2::system_clock::duration d = now.time_since_epoch();
  //納秒單位時間戳
  std::cout << "timestamp: " << d.count() << std::endl;
  //轉(zhuǎn)化為秒單位
  std::chrono::seconds t = std::chrono::duration_cast<std::chrono::seconds>(d);
  std::cout << "sec: " << t.count() << std::endl;
//簡化寫法
//  std::chrono::system_clock clock;
//  auto t = std::chrono::duration_cast<std::chrono::seconds>(
//  			clock.now().time_since_epoch()).count();
//  std::cout << "sec: " << t << std::endl;

3.2 計算時間間隔

  const auto start = std::chrono::high_resolution_clock::now();
  //do something
  std::this_thread::sleep_for(std::chrono::seconds(1));
  const auto end = std::chrono::high_resolution_clock::now();
  auto duration = start - end;
  //1000118000ns 1000ms 1s 
  std::cout << duration.count() << "ns " << 
    std::chrono::duration_cast<std::chrono::milliseconds>(duration).count()<<  "ms " <<
    std::chrono::duration_cast<std::chrono::seconds>(duration).count() << "s " <<
    std::endl;

3.3 格式化輸出

  auto now = std::chrono::system_clock::now();
  std::time_t now_c = std::chrono::system_clock::to_time_t(now);
  //cur time Thu Nov  9 23:42:38 2023
  std::cout << "cur time " << std::ctime(&now_c) << std::endl;
  //或者轉(zhuǎn)化為當(dāng)?shù)貢r間
  //自定義格式輸出
  tm * t = std::localtime(&now_c);
	char buffer[80];
	std::strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", t);
   //cur time: 2023-11-09 23:42:38
  std::cout << "cur time: " << buffer << std::endl;

3.4 字面量使用

  //使用字面量 c++20 ""y ""d  c++11 支持 ""h ""min ""s ""ms ""us
  using namespace std::chrono_literals;//在此空間定義字面量
  auto s = 60s; // 相當(dāng)于std::chrno::seconds(60)
  std::cout << "sec: " << s.count() << std::endl;
  auto min = 1min; // 相當(dāng)于std::chrono::minutes(1):
  std::cout << "min: " << min.count() << std::endl;

到此這篇關(guān)于C++日期與時間 chrono庫介紹及使用的文章就介紹到這了,更多相關(guān)C++日期與時間chrono庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于C語言一維數(shù)組算法問題詳解

    關(guān)于C語言一維數(shù)組算法問題詳解

    數(shù)組是以順序格式排列的均勻數(shù)據(jù)的集合,在C語言中學(xué)習(xí)數(shù)組的概念非常重要,因為它是基本的數(shù)據(jù)結(jié)構(gòu),這篇文章主要給大家介紹了關(guān)于C語言一維數(shù)組算法問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C++學(xué)習(xí)小結(jié)之語句

    C++學(xué)習(xí)小結(jié)之語句

    本文給大家匯總介紹了下C++中比較基礎(chǔ)的知識--語句,常用的語句都有詳細介紹和附上了相關(guān)示例,十分實用,有需要的小伙伴可以參考下
    2015-07-07
  • 深入理解Qt信號槽機制

    深入理解Qt信號槽機制

    信號槽是 Qt 框架引以為豪的機制之一。本文主要介紹了Qt信號槽機制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)

    C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • c語言解析bmp圖片的實例

    c語言解析bmp圖片的實例

    下面小編就為大家?guī)硪黄猚語言解析bmp圖片的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 一文詳解matlab實現(xiàn)形態(tài)學(xué)圖像處理

    一文詳解matlab實現(xiàn)形態(tài)學(xué)圖像處理

    這篇文章主要為大家介紹了matlab實現(xiàn)形態(tài)學(xué)圖像處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 淺談C++中字符串輸入get與getline的區(qū)別

    淺談C++中字符串輸入get與getline的區(qū)別

    這篇文章主要介紹了C++中字符串輸入get與getline的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 基于OpenCV?差分法實現(xiàn)綠葉識別

    基于OpenCV?差分法實現(xiàn)綠葉識別

    物體識別是圖像處理學(xué)在現(xiàn)實生活中較多的應(yīng)用之一,本文提供了一種相對簡單的思路來實現(xiàn)綠葉識別,適合初學(xué)圖像處理的新人研究參考。感興趣的同學(xué)可以關(guān)注一下
    2021-11-11
  • C語言動態(tài)內(nèi)存管理的實現(xiàn)

    C語言動態(tài)內(nèi)存管理的實現(xiàn)

    本文主要介紹了C語言動態(tài)內(nèi)存管理的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • VSCODE調(diào)試RDKit內(nèi)核的方法步驟(C++)

    VSCODE調(diào)試RDKit內(nèi)核的方法步驟(C++)

    本文主要介紹了VSCODE調(diào)試RDKit內(nèi)核的方法步驟,這個過程可以分為三個部分:安裝 RDKit 所需環(huán)境,安裝 VSCode 相應(yīng)插件, 寫調(diào)試代碼編譯,感興趣的可以了解一下
    2021-08-08

最新評論