ホームページ >バックエンド開発 >C++ >C 11 の std::chrono を使用して日付文字列を解析し、経過時間を計算するにはどうすればよいですか?

C 11 の std::chrono を使用して日付文字列を解析し、経過時間を計算するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 22:29:10534ブラウズ

How Can I Parse Date Strings and Calculate Elapsed Time Using C  11's std::chrono?

C 11 std::chrono を使用した日付文字列の解析

日付と時刻の情報を扱う場合、多くの場合、日付文字列を解析する必要があります。適切なデータ表現に変換します。 C 11 の場合、std::chrono 名前空間は、期間と時点を処理するための強力なツールを提供します。

日付文字列の解析

日付文字列を std に解析するには: :chrono、GCC は std::get_time 関数を提供します。 std::tm オブジェクトとフォーマット文字列を指定すると、std::get_time は入力文字列から日付と時刻のコンポーネントを抽出できます。次のコード スニペットは、これを示しています。

std::tm tm = {};
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");

GCC バージョン 5 より前のバージョンでは、std::get_time が実装されていません。代わりに、strptime:

std::tm tm = {};
strptime("Thu Jan 9 2014 12:35:34", "%a %b %d %Y %H:%M:%S", &tm);

経過時間の計算

std::tm オブジェクトで解析された日付と時刻を取得したら、を使用して time_point に変換できますstd::chrono::system_lock::from_time_t:

auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));

この time_point は、現在のタイム ゾーンで解析された日付と時刻を表します。解析された日付からの経過時間を計算するには、解析された time_point から現在の time_point を減算します。

auto now = std::chrono::system_clock::now();
auto elapsed = now - tp;

Accessing Time Components

The std::chrono:: duration オブジェクトは、経過時間コンポーネントへのアクセスを提供します。秒、分、時間、および日数を取得するには、次の関数を使用します。

auto seconds = std::chrono::duration_cast<std::chrono::seconds>(elapsed).count();
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(elapsed).count();
auto hours = std::chrono::duration_cast<std::chrono::hours>(elapsed).count();
auto days = std::chrono::duration_cast<std::chrono::days>(elapsed).count();

これらの手法を利用すると、日付文字列を効果的に解析して std::chrono 時点に変換し、経過時間を計算できます。解析された日付からの時間を取得し、便利で効率的な方法で目的の時間コンポーネントにアクセスできるようにします。

以上がC 11 の std::chrono を使用して日付文字列を解析し、経過時間を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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