首頁 > 後端開發 > C++ > 主體

如何使用 C 11 的 `std::chrono` 解析歷史日期字串併計算經過的時間?

Barbara Streisand
發布: 2024-11-26 12:11:10
原創
984 人瀏覽過

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 方法

據詢問,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 結構(tm),使用std::get_time 解析日期字串(可從GCC 5 及更高版本獲得),並將解析後的資料轉換為std::chrono::time_point (tp)。

替代方案對於 Pre-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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板