首页  >  文章  >  后端开发  >  如何使用 C 11 的 std::chrono 解析日期字符串并执行时间计算?

如何使用 C 11 的 std::chrono 解析日期字符串并执行时间计算?

Patricia Arquette
Patricia Arquette原创
2024-11-25 12:52:12786浏览

How Can I Parse Date Strings and Perform Time Calculations Using C  11's std::chrono?

用 C 11 的 std::chrono 解析日期字符串

在处理历史日期字符串时,经常需要将其解析为 C 日期各种计算的表示。 C 11 的 std::chrono 命名空间提供了强大的时间处理工具。

解析日期字符串

解析格式为“Thu Jan 9 12: 35:34 2014,”我们可以利用 std::stringstream 和 std::get_time函数:

std::stringstream ss("Jan 9 2014 12:35:34");
std::tm tm = {};
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");

这会将字符串解析为 std::tm 结构,其中包含各个时间组件。

转换为 std::chrono::time_point

要获取表示解析日期的 std::chrono::time_point,我们使用std::chrono::system_clock::from_time_t:

auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));

计算经过的时间

使用 std::chrono::time_point,我们可以轻松计算经过的时间从指定的历史时间开始date:

auto now = std::chrono::system_clock::now();
auto duration = now - tp;

访问时间组件

std::chrono::duration 提供对各个时间组件的访问:

  • duration .count() 返回时间单位的总数(秒乘以默认)
  • duration.seconds() 获取秒
  • duration.mines() 获取分钟
  • duration.hours() 获取小时
  • duration.days () 提供天

C 11支持

版本 5 之前的 GCC 不实现 std::get_time。但是,也可以使用 strptime 进行替代:

std::tm tm = {};
strptime("Thu Jan 9 2014 12:35:34", "%a %b %d %Y %H:%M:%S", &tm);

以上是如何使用 C 11 的 std::chrono 解析日期字符串并执行时间计算?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn