簡體   English   中英

C ++:將chrono :: high_resolution_clock轉換為time_t

[英]C++: convert chrono::high_resolution_clock to time_t

我有以下代碼可以正常工作:

 auto my_time = std::chrono::system_clock::now();
 std::cout << "My Time is " << std::chrono::system_clock::to_time_t(my_time) << std::endl;

但是,如果我用high_resolution_clock替換system_clock,如下所示:

auto my_time = std::chrono::high_resolution_clock::now();
std::cout << "My Time is " << std::chrono::high_resolution_clock::to_time_t(my_time) << std::endl;

我收到以下錯誤:

    no member named 'to_time_t' in 'std::__1::chrono::steady_clock'
    std::cout << "My Time is " << std::chrono::high_resolution_clock::to_time_t(my_time) << std::endl;
                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
1 error generated.

知道如何讓high_resolution_clock在這里工作嗎? (我正在對一些函數進行基准測試,所以想使用high_resolution_clock而不是system_clock)謝謝!

通常,無法將chrono::high_resolution_clock::time_point轉換為time_t 這不僅僅是因為它缺少to_time_t成員函數。 這是因為:

時間time_t度量與時間high_resolution_clock::time_point度量之間絕對沒有關系。

high_resolution_clock視為秒表。 您可以使用它來衡量某些事件發生的時間。 但你無法用它來告訴時間。

在我的平台上, high_resolution_clock測量自系統啟動以來的nanoseconds數。 如果您不知道系統啟動的時間,則無法將high_resolution_clock轉換為一天中的某個時間。

time_t ,另一方面通常測量時間,因為1970-01-01 00:00:00 UTC,所以確實有時間的日關系。

在您的系統, high_resolution_clock化名為steady_clock ,這是不要求的標准實施to_time_t 這兩者可能是不兼容的,例如,如果time_t是自紀元以來的秒數,而high_resolution_clock::period小於1秒,那么您不能將high_resolution_clock::time_point表示為time_t而不會丟失精度。

如果您使用它進行基准測試,則可以完全跳過轉換為time_t 做一些像:

auto start = std::chrono::high_resolution_clock::now();
my_function();
auto end = std::chrono::high_resolution_clock::now();
std::cout << "my_function took " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << " ms" << std::endl;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM