std::chrono::time_point オブジェクトから年、月、日、時、分、秒、ミリ秒などの個々の時間要素を抽出するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-01 06:05:02
オリジナル
504 人が閲覧しました

How can I extract individual temporal elements like year, month, day, hour, minute, second, and milliseconds from an std::chrono::time_point object?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!