首页 > 后端开发 > C++ > 如何使用 C 11 的 `std::chrono` 解析历史日期字符串并计算经过的时间?

如何使用 C 11 的 `std::chrono` 解析历史日期字符串并计算经过的时间?

Barbara Streisand
发布: 2024-11-26 12:11:10
原创
1047 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板