首頁 >後端開發 >C++ >如何從 std::chrono::time_point 中提取時間分量?

如何從 std::chrono::time_point 中提取時間分量?

DDD
DDD原創
2024-10-30 23:39:29660瀏覽

How do I extract temporal components from a std::chrono::time_point?

從std::chrono::time_point 中提取時間分量

對於system_clock::time_points,std::chrono 庫不會直接提供萃取時間成分(例如年、月和日)的功能。但是,可以透過利用系統時鐘和民用日曆之間的底層關係來檢索這些組件。

使用 C 庫提取元件

一種方法涉及轉換 time_point time_t,表示 UTC 時區自 1970 年新年以來的秒數。使用 C 函式庫的時間操作函數,您可以將 time_t 轉換為 tm 結構,其中包含年、月和日等元件。以下程式碼示範了這種方法:

<code class="cpp">system_clock::time_point now = system_clock::now();

time_t tt = system_clock::to_time_t(now);
tm utc_tm = *gmtime(&tt); // Convert to UTC time

std::cout <p><strong>提取Unix 紀元時間分量</strong></p>
<p>透過認識到現代系統中使用的大多數系統時鐘都是基於Unix紀元時間,表示自UTC 1970 年1 月1 日以來的秒數。雖然 std::chrono 不提供直接存取該值的方法,但可以透過從紀元以來經過的總時間中減去來提取組件。 </p>
<pre class="brush:php;toolbar:false"><code class="cpp">typedef duration<int ratio_multiply ratio>>> days;

system_clock::time_point now = system_clock::now();
system_clock::duration tp = now.time_since_epoch();

days d = duration_cast<days>(tp);
tp -= d;
hours h = duration_cast<hours>(tp);
tp -= h;
minutes m = duration_cast<minutes>(tp);
tp -= m;
seconds s = duration_cast<seconds>(tp);
tp -= s;

// Remaining portion of a second with system_clock::duration precision
std::cout <p><strong>使用僅標頭的C 11/14 庫</strong></p>
<p>僅日期的標頭庫提供了更方便的解決方案,讓您可以輕鬆提取這些組件:</p>
<pre class="brush:php;toolbar:false"><code class="cpp">#include "date.h"
#include <iostream>

int main()
{
    namespace C = std::chrono;
    namespace D = date;
    namespace S = std;

    auto tp = C::system_clock::now();

    auto dp = D::floor<:days>(tp);
    auto ymd = D::year_month_day{dp};
    auto time = D::make_time(C::duration_cast<:milliseconds>(tp - dp));

    S::cout <p><strong>C 20 Standard庫功能(即將推出)</strong></p>
<p>在即將推出的C 20 標準中,支援從system_clock::time_point 直接提取時間分量。文法如下:</p>
<pre class="brush:php;toolbar:false"><code class="cpp">auto tp = system_clock::now();

auto dp = floor<days>(tp);
year_month_day ymd{dp};
hh_mm_ss time{floor<milliseconds>(tp - dp)};

auto y = ymd.year();
auto m = ymd.month();
auto d = ymd.day();
auto h = time.hours();
auto M = time.minutes();
auto s = time.seconds();
auto ms = time.subseconds();</milliseconds></days></code>

以上是如何從 std::chrono::time_point 中提取時間分量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn