将历史日期字符串解析为 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中文网其他相关文章!