ホームページ >バックエンド開発 >C++ >C の `std::chrono::time_point` オブジェクトから年、月、日、時、分、秒、ミリ秒などの特定の日付と時刻のコンポーネントを抽出するにはどうすればよいですか?

C の `std::chrono::time_point` オブジェクトから年、月、日、時、分、秒、ミリ秒などの特定の日付と時刻のコンポーネントを抽出するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-30 07:59:27982ブラウズ

How do you extract specific date and time components, like year, month, day, hours, minutes, seconds, and milliseconds, from a `std::chrono::time_point` object in C  ?

std::chrono::time_point からの日付と時刻のコンポーネントの抽出

問題:

特定の日付と時刻のコンポーネントを取得するにはどうすればよいですかstd::chrono::time_point オブジェクトからの年、月、日、時、分、秒、ミリ秒などの日付と時刻のコンポーネント?

解決策:

この情報を抽出するには、システムが提供する唯一のシステム提供の時計であり、シビルカレンダーに接続されているため、system_ Clock::time_point を利用する必要があります。

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

タイムスタンプへの変換:

次に、time_point を time_t に変換します:

<code class="cpp">time_t tt = system_clock::to_time_t(now);</code>

コンポーネントの抽出:

C ライブラリを使用して、 time_t を tm に変換し、UTC で変換するかローカル タイム ゾーンで変換するかを指定します:

<code class="cpp">tm utc_tm = *gmtime(&tt);
tm local_tm = *localtime(&tt);</code>

これで、tm のコンポーネントを出力できます:

<code class="cpp">std::cout <p><strong>拡張抽出:</strong></p>
<p>system_ Clock は通常 Unix 時間に基づいていますが、その精度は多くの場合秒を超えます。高解像度コンポーネントにアクセスするには、次のコードを使用します。</p>
<pre class="brush:php;toolbar:false"><code class="cpp">using namespace std;
using namespace std::chrono;

int main()
{
    typedef duration<int ratio_multiply ratio> >>::type 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;

    cout <p>time_point を日、時間、分、秒に変換し、秒の小数部分を抽出することにより、このコードは次の出力を出力します。</p> <pre class="brush:php;toolbar:false">15806d 20:31:14 598155[1/1000000]

ライブラリ ソリューション:

ヘッダーのみの日付ライブラリはこのプロセスを簡略化し、次のコードで抽出できるようにします:

<code class="cpp">#include "date.h"

int main()
{
    auto tp = std::chrono::system_clock::now();
    auto dp = date::floor<:days>(tp);
    auto ymd = date::year_month_day{dp};
    auto time = date::make_time(std::chrono::duration_cast<:chrono::milliseconds>(tp - dp));

    std::cout <p><strong>C 20 統合:</strong></p>
<p>C 20 では、system_lock::time_point:</p>
<pre class="brush:php;toolbar:false"><code class="cpp">#include <chrono>

int main()
{
    using namespace std::chrono;
    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></chrono></code>

を使用してこれらのフィールドを抽出するための提案された構文が含まれています。さらに、希望の時間を指定することもできます抽出用のゾーン。

以上がC の `std::chrono::time_point` オブジェクトから年、月、日、時、分、秒、ミリ秒などの特定の日付と時刻のコンポーネントを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。