ホームページ >バックエンド開発 >C++ >C の chrono::time_point から特定の時間単位を抽出するにはどうすればよいですか?

C の chrono::time_point から特定の時間単位を抽出するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 08:23:02375ブラウズ

How do you extract specific temporal units from a chrono::time_point in C  ?

クロノ タイム ポイントからの時間単位の抽出

C では、 std::chrono::time_point オブジェクトから正確な時間単位を抽出するかどうかは、次によって決まります。基礎となるクロックのタイプ。 system_clock は常用カレンダーに接続されており、年、月、日、ミリ秒​​などのデータにアクセスできます。

現在時刻を表す system_ Clock::time_point を取得するには:

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

C ライブラリを使用して、それを time_t に変換し、次に tm 構造体に変換します。この変換オプションは、UTC またはローカル タイム ゾーンのいずれかにすることができます。

<code class="cpp">std::time_t tt = std::chrono::system_clock::to_time_t(now);
std::tm utc_tm = *std::gmtime(&tt);
std::tm local_tm = *std::localtime(&tt);</code>

次に、次のように、必要な時間コンポーネントを抽出できます。

<code class="cpp">int year = local_tm.tm_year + 1900;
int month = local_tm.tm_mon + 1;
int day = local_tm.tm_mday;</code>

さらに、system_ Clock は、多くの場合、ベースになります。 Unix 時間では、小数秒へのアクセスを提供します:

<code class="cpp">int frac_second = std::chrono::system_clock::duration::period::num / std::chrono::system_clock::duration::period::den;</code>

duration_cast およびカスタム期間クラスの曜日を利用して、正確な時間の計算を容易にすることができます:

<code class="cpp">std::chrono::duration<int, std::ratio_multiply<std::chrono::hours::period, std::ratio<24>>> days;
std::chrono::days d = std::chrono::duration_cast<std::chrono::days>(tp);
tp -= d;
std::chrono::hours h = std::chrono::duration_cast<std::chrono::hours>(tp);
// ... (continue for minutes, seconds, and fractional seconds)</code>

または、「日付」ライブラリは、簡素化された多用途のアプローチを提供します:

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

auto tp = std::chrono::system_clock::now();
auto dp = date::floor<date::days>(tp);
auto ymd = date::year_month_day{dp};
auto time = date::make_time(std::chrono::duration_cast<std::chrono::milliseconds>(tp-dp));
int year = ymd.year();
int month = ymd.month();
// ... (continue for day, hour, minute, second, millisecond)</code>

以上がC の chrono::time_point から特定の時間単位を抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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