履歴日付文字列を 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 サイトの他の関連記事を参照してください。