將歷史日期字串解析為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中文網其他相關文章!