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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 12:11:10984ブラウズ

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

履歴日付文字列を C 11 日付表現に解析する

この質問は、C 11 の std::chrono を使用して履歴日付文字列を解析する可能性を探ります。名前空間。目標は、秒、分、時間、日の観点からデータにアクセスするための特定の要件に従って、指定された日付からの経過時間を計算することです。

std::chrono Approach

クエリどおり、std::chrono はこのタスクに対する潜在的な解決策を提供します。提供された日付文字列形式を使用した内訳は次のとおりです。

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

このコードは std::tm struct (tm) を初期化し、std::get_time (GCC 5 以降で利用可能) を使用して日付文字列を解析します。そして、解析されたデータを std::chrono::time_point に変換します。 (tp).

GCC 5 以前の代替

GCC 5 より前では、std::get_time は使用できません。この場合、代替手段が存在します。

strptime("Thu Jan 9 2014 12:35:34", "%a %b %d %Y %H:%M:%S", &tm);
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));

strptime() によって解析が完了し、プロセスは std::get_time と同じ手順に従います。

時間の抽出期間コンポーネント

tp が取得されると、コードは時間差を計算できます。そして、さまざまなコンポーネントを抽出します:

auto elapsed = std::chrono::duration_cast<std::chrono::seconds>(
    std::chrono::system_clock::now() - tp
);
uint64_t days = elapsed.count() / 60 / 60 / 24;
uint64_t hours = (elapsed.count() / 60 / 60) % 24;
uint64_t minutes = (elapsed.count() / 60) % 60;
uint64_t seconds = elapsed.count() % 60;

これらの値は、指定された日付からの時間間隔を日、時間、分、秒で表します。

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

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