欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中std::chrono時間庫的全面解析

 更新時間:2023年10月26日 15:51:47   作者:Lion?Long  
C++?std::chrono時間庫是C++標準庫提供的一個時間處理庫,提供了一個方便、靈活和精確的時間處理工具,下面小編就帶大家深入了解一下std::chrono時間庫的使用吧

一、引言

C++ std::chrono時間庫是C++標準庫提供的一個時間處理庫,提供了一個方便、靈活和精確的時間處理工具,用于在程序中進行時間相關(guān)的操作和計算。它具有以下重要性和作用:

精確的時間計量:std::chrono時間庫提供了高精度的時間計量單位和操作,可以精確測量和計算代碼的執(zhí)行時間、延時等。

跨平臺兼容性:std::chrono時間庫在不同平臺上都具備良好的兼容性,無論是Windows、Linux還是其他操作系統(tǒng),都可以使用該庫進行時間處理,使代碼具備良好的可移植性。

高度可擴展性:該庫提供了豐富的時間單位和精度選項,適應(yīng)不同場景下的時間計算需求。無論是秒、毫秒、微秒還是納秒的時間單位,都可以很方便地應(yīng)用于代碼中。

時鐘的靈活選擇:std::chrono時間庫提供了不同類型的時鐘,如系統(tǒng)時鐘(system_clock)、穩(wěn)定時鐘(steady_clock)和高分辨率時鐘(high_resolution_clock),可以根據(jù)具體需求選擇合適的時鐘類型。

時間點和時間段的處理:該庫提供了表示時間點(time_point)和時間段(duration)的相關(guān)類,可以對時間進行精確刻度和處理。時間點表示具體的時間,時間段表示兩個時間點之間的時間差。

C++ std::chrono時間庫能夠幫助準確測量和控制代碼的執(zhí)行時間,處理定時任務(wù),進行時間間隔計算等操作。這里將全面介紹C++ std::chrono時間庫的使用,幫助讀者理解其核心概念和各種功能,從而在編程中更好地掌握時間的節(jié)奏,解放代碼從時間束縛中。

目標:

  • 首先對C++ std::chrono時間庫進行全面而清晰的概述,解釋其在編程中的重要性和作用。
  • 詳細講解C++ std::chrono時間庫的組成部分,包括duration、time_point和clock。了解它們是如何相互配合工作的,以及如何使用它們來進行時間相關(guān)的操作。
  • 供詳細的使用攻略,涵蓋duration(時間段)的使用方法、單位和精度的選擇、示例代碼等;time_point(時間點)的創(chuàng)建、比較和操作方法,以及相關(guān)的應(yīng)用場景;不同類型的時鐘(clock)的特點、適用場景和使用方法等。
  • 除了基本的使用方法,還將探討一些高級技巧和實踐,如時區(qū)處理、時間格式轉(zhuǎn)換等。我們還將解決一些常見的時間相關(guān)問題,提供實用的技巧和最佳實踐,更高效、準確地使用時間庫,解放代碼從時間束縛中。

二、C++ std::chrono時間庫概述

2.1、std::chrono命名空間的作用和用途

C++ std::chrono命名空間是C++標準庫中的一個命名空間,它包含了一組用于處理時間和時間相關(guān)操作的類和函數(shù)。該命名空間提供了豐富的時間處理功能,旨在方便進行時間計算、測量和控制。

std::chrono命名空間的主要作用和用途:

1.提供時間單位和精度的定義:std::chrono命名空間定義了一系列時間單位,如秒(seconds)、毫秒(milliseconds)、微秒(microseconds)和納秒(nanoseconds),以及精度等級,如高精度時鐘(high_resolution_clock)和穩(wěn)定時鐘(steady_clock)。這些定義使得時間計算和測量更加靈活和精確。

2.定義時間段和時間點的概念:std::chrono命名空間提供了表示時間段(duration)和時間點(time_point)的相關(guān)類,包括std::chrono::duration和std::chrono::time_point。時間段表示兩個時間點之間的時間差,時間點表示具體的時間。

3.支持時間的計算和操作:該命名空間提供了各種用于時間計算和操作的函數(shù)和操作符。例如,可以通過相加或相減兩個時間點或時間段來計算時間的差異、延遲或間隔。也可以比較兩個時間點的先后順序,判斷時間的先后關(guān)系。

4.管理和控制時間流逝:std::chrono命名空間提供了函數(shù)和工具,可用于管理和控制時間的流逝。例如,可以獲取當前的系統(tǒng)時間和時鐘時間,或者獲取程序執(zhí)行的實際時間。還可以設(shè)置定時任務(wù)或者延時執(zhí)行代碼。

5.std::chrono命名空間是C++標準庫的一部分,因此它具有跨平臺的兼容性,并且在不同的操作系統(tǒng)中都能正常工作。

2.2、基本組成部分:duration、time_point和clock

時間庫的基本組成部分包括duration(時間段)、time_point(時間點)和clock(時鐘)。它們相互配合,用于表示和處理時間的不同方面。

duration(時間段):

duration是時間庫中表示時間段的類。它表示兩個時間點之間的時間差。時間段可以用秒(seconds)、毫秒(milliseconds)、微秒(microseconds)等不同的單位來表示。duration類的模板參數(shù)包括時間單位和所需的精度。比如:std::chrono::duration<int, std::ratio<1, 1000>>表示毫秒級別的時間段。在使用Duration時,可以進行加減、比較和表示等操作。

time_point(時間點):

time_point表示一個特定的時間點,可以理解為時間的戳記。時間點和時間段之間可以進行加減運算,用于計算時間的差異或延遲。time_point類的模板參數(shù)包括所采用的時鐘類型和時間單位。比如:std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>表示系統(tǒng)時鐘下的納秒級時間點??梢垣@取當前的時間點、比較不同時間點的順序,以及對時間點進行格式化等操作。

clock(時鐘):

clock是時間庫中的時鐘類,用于提供時間的基準和計量。不同的時鐘類型提供不同的時間精度和功能。常用的時鐘類型有系統(tǒng)時鐘(system_clock)、穩(wěn)定時鐘(steady_clock)和高精度時鐘(high_resolution_clock)。系統(tǒng)時鐘提供了與操作系統(tǒng)相關(guān)的時間,穩(wěn)定時鐘提供了穩(wěn)定的、不受系統(tǒng)時間變化影響的時間,而高精度時鐘提供了更高的時間精度。時鐘類可以獲取當前時間,計算時間的間隔和延遲等。

這三個基本組成部分相互配合,使時間庫具有了強大的時間處理能力。Duration表示時間段,Time_point表示時間點,而Clock則提供了時鐘的基準。通過使用它們,可以對時間進行準確的計算、比較和操作,從而靈活地處理時間相關(guān)的任務(wù)和邏輯。

三、duration的使用詳解

3.1、duration表示時間段的概念和使用方法

Duration(時間段)是時間庫中表示時間間隔的類,用于表示兩個時間點之間的時間差。

1.表示和定義duration:

duration類是一個模板類,模板參數(shù)包括時間單位和精度。時間單位可以是秒(seconds)、毫秒(milliseconds)、微秒(microseconds)或納秒(nanoseconds),精度可以是整數(shù)類型(int、long)、浮點類型(float、double)等。例如,可以定義一個表示毫秒級別的時間段:std::chrono::duration<int, std::milli>。

2.創(chuàng)建duration對象:

可以通過直接給Duration對象賦值來創(chuàng)建它。對Duration對象的賦值可以使用整數(shù)、浮點數(shù)、其他duration對象,以及乘法、除法、加法和減法等操作。例如:

std::chrono::duration<int, std::milli> duration1(500); // 創(chuàng)建一個表示500毫秒的duration對象
std::chrono::duration<double, std::ratio<1, 1000>> duration2 = 2.5; // 創(chuàng)建一個表示2.5毫秒的duration對象
std::chrono::duration<float, std::ratio<1>> duration3 = duration1 + duration2; // 創(chuàng)建一個表示3秒的duration對象

3.訪問duration的值:

可以使用成員函數(shù)count()來訪問Duration對象的值。count()函數(shù)返回Duration對象表示的時間段值,以它所定義的時間單位返回。例如:

std::chrono::duration<int, std::milli> duration(500);
int milliseconds = duration.count(); // 返回500

4.操作duration:

可以使用各種數(shù)學(xué)運算符對duration對象進行加法、減法、乘法和除法等操作。這些操作在邏輯上保持了時間單位的一致性。例如:

std::chrono::duration<int, std::milli> duration1(500);
std::chrono::duration<double, std::nano> duration2(1.5);
std::chrono::duration<int, std::micro> duration3 = duration1 + duration2; // 表示501.5微秒
std::chrono::duration<int, std::milli> duration4 = duration1 * 2; // 表示1000毫秒
std::chrono::duration<double, std::milli> duration5 = duration2 / 2; // 表示0.75毫秒

5.比較duration:

可以使用比較運算符(<、<=、>、>=、==、!=)來比較duration對象之間的大小關(guān)系。比較操作是基于Duration對象所表示的時間單位進行的。例如:

std::chrono::duration<int, std::milli> duration1(500);
std::chrono::duration<double, std::nano> duration2(1.5);
bool result = duration1 > duration2; // 返回true,因為500毫秒大于1.5納秒

3.2、duration的各種單位和精度選項

時間單位(Time Units)。時間單位表示Duration所表示時間間隔的度量單位。時間單位包括:

  • 納秒(nanoseconds):std::chrono::nanoseconds
  • 微秒(microseconds):std::chrono::microseconds
  • 毫秒(milliseconds):std::chrono::milliseconds
  • 秒(seconds):std::chrono::seconds
  • 分鐘(minutes):std::chrono::minutes
  • 小時(hours):std::chrono::hours

這些單位可以提供不同精度的時間間隔表示。

精度(Precision):

精度表示duration所使用的數(shù)值類型,可以是整型(整數(shù)類型)或浮點型(浮點數(shù)類型)??梢允褂脴藴蕯?shù)值類型(如int、long、float、double)作為Duration的數(shù)值類型,并與所選的時間單位進行配對。
例如,可以選擇使用以下精度選項:

  • 整數(shù)類型精度:std::chrono::duration<int, TimeUnit>
  • 長整數(shù)類型精度:std::chrono::duration<long, TimeUnit>
  • 浮點類型精度:std::chrono::duration<float, TimeUnit>
  • 雙精度類型精度:std::chrono::duration<double, TimeUnit>

例如,如果需要表示毫秒級別的時間間隔,可以選擇std::chrono::duration<int, std::milli>,它使用整數(shù)類型表示毫秒。

下面是一些示例,展示了如何使用不同的時間單位和精度選項:

using namespace std::chrono;

// 表示10毫秒的duration,使用整數(shù)類型精度
duration<int, std::milli> duration1(10);

// 表示5秒的duration,使用長整數(shù)類型精度
duration<long, std::seconds> duration2(5);

// 表示2.5秒的duration,使用浮點類型精度
duration<float, std::seconds> duration3(2.5);

// 表示1分鐘的duration,使用雙精度類型精度
duration<double, std::minutes> duration4(1);

// 可以使用auto關(guān)鍵字自動推導(dǎo)出duration的類型
auto duration5 = duration<int, std::micro>(100);

3.3、使用示例

以下是一些使用Duration的具體示例,涵蓋時間計算和延時操作:

時間計算示例:

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;

    // 創(chuàng)建兩個時間點
    steady_clock::time_point start = steady_clock::now();
    std::this_thread::sleep_for(std::chrono::seconds(2)); // 模擬耗時操作
    steady_clock::time_point end = steady_clock::now();

    // 計算時間間隔
    duration<double> duration = duration_cast<duration<double>>(end - start);

    // 輸出時間間隔
    std::cout << "Elapsed time: " << duration.count() << " seconds\n";

    return 0;
}

上述示例中,使用steady_clock來獲取當前時間點,并通過duration_cast將時間間隔轉(zhuǎn)換為秒。最后,使用count()函數(shù)獲取時間間隔的值并進行輸出。

延時操作示例:

#include <iostream>
#include <chrono>
#include <thread>

int main() {
    using namespace std::chrono;

    std::cout << "Start" << std::endl;

    // 進行延時操作,暫停程序執(zhí)行
    std::this_thread::sleep_for(std::chrono::seconds(2));

    std::cout << "End" << std::endl;

    return 0;
}

使用this_thread::sleep_for函數(shù)來進行延時操作,程序會暫停執(zhí)行2秒鐘,然后繼續(xù)往下執(zhí)行。

四、time_point的使用詳解

4.1、time_point表示具體時間點的概念和使用方法

time_point(時間點)是std::chrono庫中用于表示具體時間的類型。它表示了某個具體時刻的時間點,可以用于比較不同時間點的時間先后或時間間隔的計算。

time_point由兩部分組成:時鐘(Clock)和表示時間的持續(xù)時間(Duration)。

1.時鐘(Clock):

時鐘是std::chrono庫中的一種類型,用于測量時間的流逝。std::chrono庫提供了幾種不同的時鐘類型,包括steady_clock(穩(wěn)定時鐘)、system_clock(系統(tǒng)時鐘)和high_resolution_clock(高分辨率時鐘)等。不同的時鐘類型提供了不同的時間精度和適用范圍。

2.表示時間的持續(xù)時間(Duration):

Duration表示時間的長度或時間間隔,可以是納秒、微秒、毫秒、秒、分鐘、小時等不同的時間單位。Duration類的模板參數(shù)指定了時間長度的數(shù)值類型和時間單位。

使用方法:

要創(chuàng)建一個time_point對象,需要指定時鐘類型和持續(xù)時間??梢允褂卯斍暗臅r鐘來獲取當前時間點,也可以根據(jù)需求指定一個特定的時間點。示例:

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;

    // 使用系統(tǒng)時鐘獲取當前時間點
    std::chrono::system_clock::time_point now = std::chrono::system_clock::now();

    // 創(chuàng)建一個表示特定時間點的time_point
    std::chrono::system_clock::time_point specific_time = 
        std::chrono::system_clock::time_point(std::chrono::seconds(1625100000));

    // 比較兩個時間點的先后
    if (now > specific_time) {
        std::cout << "The current time is later than the specific time.\n";
    } else {
        std::cout << "The current time is earlier than the specific time.\n";
    }

    // 計算時間間隔
    std::chrono::duration<double> duration = now - specific_time;
    std::cout << "The duration between the two time points is: " << duration.count() << " seconds.\n";

    return 0;
}

通過std::chrono庫中的system_clock獲取了當前時間點,并通過手動指定一個特定的時間點。然后,可以比較這兩個時間點的先后,并計算它們之間的時間間隔。

4.2、time_point與duration之間的關(guān)系

time_point表示一個具體的時間點,可以視為時間的參考點或標記。它由兩個組成部分構(gòu)成:時鐘(Clock)和持續(xù)時間(Duration)。時鐘指定了時間的基準和精度,而持續(xù)時間表示兩個時間點之間的時間間隔。

duration表示一個時間長度或時間間隔,它可以是納秒、微秒、毫秒、秒、分鐘、小時等不同的時間單位。

duration模板類的參數(shù)指定了時間長度的數(shù)值類型和時間單位。持續(xù)時間的正負值決定了時間間隔是向前還是向后。

time_point和duration之間的關(guān)系:

  • 通過time_point和duration的組合,可以表示一個時間點,也可以計算兩個時間點之間的時間間隔。
  • 可以在time_point上添加或減去某個duration,以獲得新的time_point。例如,可以將一個time_point向前推進一個duration,或者將一個duration加上一個time_point來計算未來的時間點。
  • 可以通過計算兩個time_point之間的時間間隔,得到一個duration對象。這是通過減去一個time_point(較早的時間點)從另一個time_point(較晚的時間點)來實現(xiàn)的。

下面是一個使用time_point和duration的示例,展示了它們之間的關(guān)系:

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;

    // 獲取當前時間點
    system_clock::time_point start = system_clock::now();

    // 進行一些耗時操作
    std::this_thread::sleep_for(std::chrono::seconds(2));

    // 獲取后續(xù)的時間點
    system_clock::time_point end = system_clock::now();

    // 計算時間間隔
    duration<double> duration = duration_cast<duration<double>>(end - start);

    // 輸出時間間隔
    std::cout << "Elapsed time: " << duration.count() << " seconds\n";

    return 0;
}

說明:使用system_clock獲取了開始和結(jié)束的時間點,然后通過減法操作計算時間間隔duration。最后,使用duration的count()方法獲取時間間隔的值,并輸出結(jié)果。這個示例演示了如何結(jié)合使用time_point和duration來計算時間間隔。

4.3、如何創(chuàng)建、比較和操作time_point對象

演示了如何創(chuàng)建、比較和操作time_point對象:

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;

    // 創(chuàng)建一個time_point對象 - 使用系統(tǒng)時鐘獲取當前時間點
    system_clock::time_point now = system_clock::now();

    // 創(chuàng)建一個time_point對象 - 手動指定一個特定時間點
    system_clock::time_point specific_time = system_clock::time_point(seconds(1625100000));

    // 比較兩個time_point對象的先后
    if (now > specific_time) {
        std::cout << "The current time is later than the specific time.\n";
    } else {
        std::cout << "The current time is earlier than the specific time.\n";
    }

    // 操作time_point對象,計算時間間隔
    system_clock::time_point future = now + hours(48);
    duration<double> duration = duration_cast<duration<double>>(future - now);
    std::cout << "The duration between now and future is: " << duration.count() << " seconds.\n";

    return 0;
}

說明:使用system_clock獲取了當前時間點,并通過手動指定一個特定的時間點創(chuàng)建了另一個time_point對象。然后,比較這兩個time_point對象的先后關(guān)系,并輸出結(jié)果。接下來,操作time_point對象,通過將一個duration(48小時)加到當前時間點上,得到一個未來的時間點。最后,我們計算了當前時間點和未來時間點之間的時間間隔,并輸出結(jié)果。

注意:在計算時間間隔時,使用了duration_cast將時間間隔轉(zhuǎn)換為所需的duration類型(在這里是double類型)。

五、clock的使用詳解

5.1、不同類型的clock

在std::chrono庫中,存在三種不同類型的時鐘:system_clock、steady_clock和high_resolution_clock。它們都用于表示時間點和測量時間間隔,但在實際應(yīng)用中會有一些區(qū)別。

1.system_clock:

  • system_clock是系統(tǒng)級別的時鐘,它表示實時時鐘,也就是指示當前時間的時鐘。它的時間點是與系統(tǒng)的時鐘相關(guān)聯(lián)的,可能受到時鐘調(diào)整和時區(qū)的影響。
  • system_clock用于獲取當前的系統(tǒng)時間,可以用來進行日常時間計算和顯示。它通常被用作默認的時鐘類型。
  • system_clock的最小時間單位取決于系統(tǒng),可能是秒、毫秒或微秒。

2.steady_clock:

  • steady_clock是一個單調(diào)遞增的時鐘,不受任何時鐘調(diào)整或時區(qū)的影響。它提供了一個穩(wěn)定、可靠的時間基準,適合用于測量時間間隔和計算算法的執(zhí)行時間。
  • steady_clock的最小時間單位取決于實現(xiàn),通常是納秒或微秒級別。

3.high_resolution_clock:

  • high_resolution_clock是一個可用于測量小時間間隔的時鐘。它通常使用最高分辨率的時鐘源來提供更高的時間精度。在大部分平臺上,high_resolution_clock是steady_clock的別名,因此也是一個單調(diào)遞增的時鐘。
  • high_resolution_clock的最小時間單位取決于實現(xiàn),通常是納秒或微秒級別。

使用不同類型的時鐘的示例:

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;

    // 使用system_clock獲取當前時間
    system_clock::time_point system_now = system_clock::now();

    // 使用steady_clock獲取開始時間
    steady_clock::time_point steady_start = steady_clock::now();

    // 一些操作...

    // 使用steady_clock獲取結(jié)束時間
    steady_clock::time_point steady_end = steady_clock::now();

    // 使用high_resolution_clock獲取開始時間
    high_resolution_clock::time_point high_res_start = high_resolution_clock::now();

    // 一些操作...

    // 使用high_resolution_clock獲取結(jié)束時間
    high_resolution_clock::time_point high_res_end = high_resolution_clock::now();

    // 輸出時間間隔
    duration<double> steady_duration = duration_cast<duration<double>>(steady_end - steady_start);
    duration<double> high_res_duration = duration_cast<duration<double>>(high_res_end - high_res_start);

    std::cout << "Steady duration: " << steady_duration.count() << " seconds.\n";
    std::cout << "High resolution duration: " << high_res_duration.count() << " seconds.\n";

    return 0;
}

說明:使用system_clock獲取了當前時間,使用steady_clock和high_resolution_clock獲取了開始和結(jié)束時間。然后,通過減法操作計算了時間間隔,并使用duration_cast將時間間隔轉(zhuǎn)換為double類型的秒數(shù)。最后,輸出了steady_clock和high_resolution_clock的時間間隔。

5.2、每種clock的特點和適用場景

不同類型的時鐘(system_clock、steady_clock和high_resolution_clock)具有不同的特點和適用場景

1.system_clock:

特點:system_clock是一個系統(tǒng)級別的時鐘,用于表示實時時鐘,它的時間點是與系統(tǒng)相關(guān)聯(lián)的。它可以受到時鐘調(diào)整和時區(qū)的影響。

適用場景:system_clock適用于獲取當前的系統(tǒng)時間、進行日常時間計算和顯示。它通常被用作默認的時鐘類型。

2.steady_clock:

特點:steady_clock是一個單調(diào)遞增的時鐘,不受任何時鐘調(diào)整或時區(qū)的影響,提供了一個穩(wěn)定、可靠的時間基準。

適用場景:steady_clock適用于測量時間間隔、計算算法的執(zhí)行時間等希望得到穩(wěn)定和可靠時間測量的場景。由于不受時鐘調(diào)整的影響,它特別適合用于計算程序的運行時間、測量短時間間隔等要求精確性的計時操作。

3.high_resolution_clock:

特點:high_resolution_clock是一個可用于測量小時間間隔的時鐘,通常使用最高分辨率的時鐘源來提供更高的時間精度。在大部分平臺上,high_resolution_clock是steady_clock的別名,因此也是一個單調(diào)遞增的時鐘。

適用場景:high_resolution_clock可以用于需要更高時間精度的場景,比如測量微小的時間間隔、對性能進行優(yōu)化的任務(wù),或者需要盡可能精確的時間測量。

注意:不同的平臺可能對這些時鐘的實現(xiàn)有所不同,最小時間單位也可能有所不同??梢允褂胐uration_cast將時間間隔轉(zhuǎn)換為所需的時間單位(例如秒、毫秒、納秒等)。

如果需要表示當前實時時間、進行日常時間計算和顯示,可以使用system_clock。而如果需要測量時間間隔、計算算法的執(zhí)行時間等,可以使用steady_clock。如果需要更高的時間精度,可以使用high_resolution_clock。

六、應(yīng)用示例

定時任務(wù)。可以使用std::this_thread::sleep_for函數(shù)來創(chuàng)建定時任務(wù)。每隔一秒打印一次消息的示例:

#include <iostream>
#include <chrono>
#include <thread>

int main() {
    while (true) {
        std::cout << "Hello, World!" << std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

測量代碼執(zhí)行時間:使用std::chrono::steady_clock可以測量代碼塊的執(zhí)行時間。測量排序算法的執(zhí)行時間:

#include <iostream>
#include <chrono>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> nums = {5, 2, 8, 1, 9};

    auto start = std::chrono::steady_clock::now();
    std::sort(nums.begin(), nums.end());
    auto end = std::chrono::steady_clock::now();

    std::chrono::duration<double> diff = end - start;
    std::cout << "Sorting took " << diff.count() << " seconds." << std::endl;

    return 0;
}

使代碼跨平臺。使用std::chrono可以實現(xiàn)跨平臺的時間處理,避免依賴于特定平臺的系統(tǒng)調(diào)用。獲取當前時間點并打印出來:

#include <iostream>
#include <chrono>

int main() {
    auto now = std::chrono::system_clock::now();
    std::time_t time = std::chrono::system_clock::to_time_t(now);

    std::cout << "Current time: " << std::ctime(&time) << std::endl;

    return 0;
}

時間格式化:std::chrono庫提供了一些用于格式化時間的函數(shù)和類??梢允褂胹td::put_time函數(shù)將時間對象格式化為字符串,并指定所需的時間格式。它接受一個時間對象和格式化字符串作為參數(shù),返回一個格式化后的字符串。示例代碼如下:

#include <iostream>
#include <chrono>
#include <iomanip>

int main() {
    auto now = std::chrono::system_clock::now();
    std::time_t t = std::chrono::system_clock::to_time_t(now);
    std::cout << "Current time: " << std::put_time(std::localtime(&t), "%c") << std::endl;
    return 0;
}

說明:將當前時間格式化為日期和時間的字符串,并以本地時間格式(“%c”)進行輸出。

總結(jié)

C++的std::chrono時間庫提供了處理時間相關(guān)操作的功能。

核心概念:

時鐘(Clock):表示時間的源頭,提供了時間的基準和刻度。常見的時鐘有系統(tǒng)時鐘(system_clock)、穩(wěn)定時鐘(steady_clock)和高精度時鐘(high_resolution_clock)。

時間點(Time Point):表示特定時鐘上的一個時間。時間點可使用時鐘的成員函數(shù)now()獲取,也可以通過時鐘的to_time_point()函數(shù)從時間表示轉(zhuǎn)換得到。

時間間隔(Duration):表示一段時間的表示,可以是秒、毫秒、微秒、納秒等等。時間間隔的類型為duration,比如duration<int, std::ratio<1, 1000>>表示毫秒。

使用方法:

獲取當前時間點:使用時鐘的now()成員函數(shù)可以獲取當前時間點,返回一個時間點對象。

std::chrono::system_clock::time_point now = std::chrono::system_clock::now();

計算時間間隔:使用時間點對象相減可以計算時間間隔,返回一個時間間隔對象。

std::chrono::duration<double> diff = end - start;
double seconds = diff.count();

休眠指定時間:使用std::this_thread::sleep_for()函數(shù)可以使當前線程休眠指定的時間間隔。

std::this_thread::sleep_for(std::chrono::seconds(1));

轉(zhuǎn)換時間表示:可以通過時鐘的成員函數(shù)to_time_t()將時間點對象轉(zhuǎn)換為time_t表示,或使用ctime()函數(shù)將time_t轉(zhuǎn)換為字符串表示。

std::time_t time = std::chrono::system_clock::to_time_t(now);
std::cout << "Current time: " << std::ctime(&time) << std::endl;

以上就是C++中std::chrono時間庫的全面解析的詳細內(nèi)容,更多關(guān)于C++ std::chrono時間庫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++中函數(shù)重載詳解

    C++中函數(shù)重載詳解

    大家好,本篇文章主要講的是C++中函數(shù)重載詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C++?的cout格式化輸出場景示例詳解

    C++?的cout格式化輸出場景示例詳解

    這篇文章主要為大家介紹了C++的cout格式化輸出場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • C++ Boost Graph算法超詳細精講

    C++ Boost Graph算法超詳細精講

    這篇文章主要介紹了C++ Boost Graph算法,我門嘗試使用Boost.Graph庫來運行Goldberg的最大流算法。 Boost.Graph將其稱為push_relabel_max_flow
    2022-10-10
  • 利用Matlab復(fù)刻羊了個羊小游戲

    利用Matlab復(fù)刻羊了個羊小游戲

    最近羊了個羊游戲可謂是異?;鸨磉厧缀醵荚谕?,他其實就是一個簡單的卡通背景消除闖關(guān)游戲,本文將用Matlab復(fù)刻這一游戲,感興趣的可以了解一下
    2022-09-09
  • 關(guān)于C++運算符重載的一些困惑詳解

    關(guān)于C++運算符重載的一些困惑詳解

    這篇文章主要給大家介紹了關(guān)于C++運算符重載的一些困惑,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C語言實現(xiàn)24點游戲計算器的示例代碼

    C語言實現(xiàn)24點游戲計算器的示例代碼

    24點是一種益智游戲,24點是把4個整數(shù)(一般是正整數(shù))通過加減乘除以及括號運算,使最后的計算結(jié)果是24的一個數(shù)學(xué)游戲,24點可以考驗人的智力和數(shù)學(xué)敏感性,它能在游戲中提高人們的心算能力。本文將用C語言實現(xiàn)這一游戲,感興趣的可以了解一下
    2022-08-08
  • C++模版函數(shù)詳解

    C++模版函數(shù)詳解

    C++中的模版總體可以分為兩大類:模版函數(shù)、模版類。本篇文章先寫模版函數(shù),需要的朋友可以參考下
    2017-02-02
  • QT實現(xiàn)單詞檢索軟件的示例代碼

    QT實現(xiàn)單詞檢索軟件的示例代碼

    本文主要介紹了QT實現(xiàn)單詞檢索軟件的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++采用TLS線程局部存儲的用法實例

    C++采用TLS線程局部存儲的用法實例

    這篇文章主要介紹了C++采用TLS線程局部存儲的用法實例,詳細講述了TLS索引及線程的操作,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • C語言陷阱與缺陷之數(shù)組越界訪問詳解

    C語言陷阱與缺陷之數(shù)組越界訪問詳解

    這篇文章主要為大家詳細介紹了C語言的數(shù)組越界訪問,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論