std::chrono::time_point からの時間要素の抽出
クエリ:
std::chrono::time_point オブジェクトから年、月、日、時、分、秒、ミリ秒などの特定の時間要素を抽出するにはどうすればよいですか?
解決策:
time_point からこれらの要素を抽出するには、system_ Clock::time_point を使用する必要があります。これは、西暦との関係があるためです。現在の system_clock::time_point を取得します:
<code class="cpp">system_clock::time_point now = system_clock::now();</code>
これを time_t 値に変換します:
<code class="cpp">time_t tt = system_clock::to_time_t(now);</code>
UTC タイムゾーンまたはローカル タイムゾーンで時刻を抽出する必要がある場合は、time_t 値を変換しますtm へ:
<code class="cpp">tm utc_tm = *gmtime(&tt); // UTC tm local_tm = *localtime(&tt); // Local</code>
tm 構造体の対応するフィールドを使用して特定の要素を抽出します:
<code class="cpp">std::cout << local_tm.tm_year + 1900 << '\n'; // Year std::cout << local_tm.tm_mon + 1 << '\n'; // Month std::cout << local_tm.tm_mday << '\n'; // Day
拡張情報:
C ライブラリを使用すると時間変換が可能になります。すべての system_ Clock 実装は Unix 時間に基づいており、通常は 1970 年 1 月 1 日 (協定世界時) からの秒単位で測定されることに注意することが重要です。
より正確に抽出するには、 system_lock 精度:
<code class="cpp">system_clock::duration tp = now.time_since_epoch(); days d = duration_cast<days>(tp); // Days tp -= d; // Subtract days hours h = duration_cast<hours>(tp); // Hours tp -= h; // Subtract hours ... // Continue for minutes, seconds, and fractional seconds</code>
適切な期間単位で結果を出力:
<code class="cpp">std::cout << d.count() << "d " << h.count() << ':' << m.count() << ':' << s.count(); std::cout << " " << tp.count() << "[" << system_clock::duration::period::num << '/' << system_clock::duration::period::den << "]\n";
ライブラリの拡張:
時刻抽出を簡素化する場合、 date などの C 11/14 ライブラリの使用を検討してください。これにより、必要なコードが次のように削減されます。
<code class="cpp">auto tp = std::chrono::system_clock::now(); using date::floor; // Namespace for streaming operator std::cout << tp << '\n'; // Outputs date and time components auto dp = floor<date::days>(tp); // Omits fractional parts auto ymd = date::year_month_day{dp}; ... // Individual elements can be accessed as members of ymd</code>
C 20 標準提案:
提案された C 20 作業草案には、system_ Clock:: からこれらのフィールドを抽出するための直接構文が含まれています。時点:
<code class="cpp">year_month_day ymd{floor<days>(tp)}; hh_mm_ss time{floor<milliseconds>(tp - dp)}; auto y = ymd.year(); auto m = ymd.month(); ... // Extract remaining elements similarly</code>
以上がstd::chrono::time_point オブジェクトから年、月、日、時、分、秒、ミリ秒などの個々の時間要素を抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。