将 std::string 转换为 std::chrono::duration

2023-12-09

我的目标是转换一张单曲string以形式"%H:%M:%S" to chrono::duration in C++11.

举个例子,为了转换"00:15:00", 我想出了以下间接解决方案,我计算了两个时间点 (1)"00:15:00"和(2)"00:00:00",它们是关于system_clock or steady_clock:然后我将它们相减以获得持续时间。

std::tm tm0 = {}, tm1{};
std::stringstream ss0("00:00:00"), ss1("00:15:00");
ss0 >> std::get_time(&tm0, "%H:%M:%S");
ss1 >> std::get_time(&tm1, "%H:%M:%S");
auto t0 = std::chrono::system_clock::from_time_t(std::mktime(&tm0));
auto t1 = std::chrono::system_clock::from_time_t(std::mktime(&tm1));
auto d = t1-t0;
std::cout << std::chrono::duration_cast<std::chrono::seconds>(d).count();

它进行了转换,但我想知道是否有一种优雅的方式或直接的方式来实现这一点。


您当前的解决方案很少会给您错误的答案。如果您的两个当地时间恰好跨越您当地时区的 UTC 偏移量变化(例如夏令时转变),那么该转变量将包含在减法中,随后给出错误的答案。

我建议您自己进行解析以获取小时、分钟和秒的值ints:

int h0, h1;
int m0, m1;
int s0, s1;

然后你可以非常简单地将它们转换为适当的单位并添加/减去它们:

auto d = (hours{h1} + minutes{m1} + seconds{s1})
       - (hours{h0} + minutes{m0} + seconds{s0});

的类型d is seconds.

在 C++11 中,您有多种解析选项,以下是最简单的选项之一:

ss0 >> h0 >> c >> m0 >> c >> s0;
ss1 >> h1 >> c >> m1 >> c >> s1;

(where c is a char来解析:)

在C++20中会有一个std::chrono::parse可以这样使用的函数:

seconds d;
ss0 >> parse("%H:%M:%S", d);

或者可以使用"%T"作为快捷方式"%H:%M:%S"。我提到这一点是因为您使用的是 C++11,而不是 C++20。但存在一个C++20 chrono 的免费开源预览适用于 C++11/14/17。对于这部分,您只需要标头 date.h,它是一个仅标头的库。

#include "date/date.h"

// ...

seconds d;
ss0 >> date::parse("%T", d);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 std::string 转换为 std::chrono::duration 的相关文章

  • 格式说明符%02x

    我有一个简单的程序 include
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • xcode ld:架构 x86_64 的 8 个重复符号

    我正在 xcode 和 c 中使用 GLUT 和 OpenGL 制作游戏 我想在我的游戏中放置一个 3D 模型 这是头文件的一般外观 unsigned int GunNumVerts 37812 float GunVerts f 1 1 1
  • 加载工作空间时出现“bad magic number”错误的原因以及如何避免?

    我尝试加载 R 工作区并收到此错误 Error bad restore file magic number file may be corrupted no data loaded In addition Warning message f
  • Go 命令行调用中的三个点“./...”是什么意思?

    如果你在 Travis CI 上运行 Golang 测试 它会用三个点下载所有依赖项 go get d v go build v 什么是 指示或扩展到那里 我做了一些研究 但它似乎不是 Unix 约定 从命令go help packages
  • 有没有办法从 .app 文件对 Xcode 项目进行逆向工程?

    主题说明了一切 我这里有一个 app 文件 但 Xcode 项目不再对我可用 有没有什么方法可以获取 app 文件并从中逆向工程 Xcode 项目 以便我可以查看用于制作它的代码 首先 对源代码进行签名和加密 其次 如果您身在美国 古巴 朝
  • WP7 将文本环绕图像

    我有这个代码
  • 如何使用 Google Cloud Shell 安排 shell 脚本?

    我有一个存储在 GCS 中的 sh 文件 我正在尝试通过 google cloud shell 安排 sh 文件 我可以使用运行相同的文件gsutil cat gs miptestauto baby sh sh命令但无法安排它 以下是我用于
  • SMTP GMAIL 连接

    我无法使用 PHPMailer 连接到 SMTP GMAIL 这是错误 2015 年 6 月 25 日 22 54PM 出错 stream socket client 无法 连接到 smtp gmail com 587 连接超时 home
  • 获取有关 Swift 中进程的信息

    我正在尝试获取有关 Swift 中流程的一些数据 我使用这段代码作为起点 pid t pid 10000 rusage info current rusage if proc pid rusage pid RUSAGE INFO CURRE
  • Angular 没有给出复选框的当前状态

    我已经开始构建一个 ToDo 示例应用程序 我面临一个奇怪的问题 下面是待办事项列表的 HTML 代码 在该列表中 我为复选框设置 ngModel 并触发更改事件 监听变化的代码 我只将当前状态打印到控制台 看下图 您可以看到复选框的当前状
  • Linux 上的 pthreads 是如何被调度程序看到的

    我有一个关于 Linux 上 pthread 实现的问题 假设一个进程有5个线程 现在调度程序如何看到这些线程 或根本看不到 例如当调度程序被调用时 它是否只调度主进程 然后主进程有责任在每个线程之间进行调度 或者是另一种方式 调度程序调度
  • 为什么必须限定重载模板基类方法的范围?

    我似乎无法在不将范围限定到基类的情况下调用基类的方法 这似乎是因为我重载了该方法 如果我不重载该方法 那么编译器不会抱怨 这是我想做的一个例子 struct BaseClass template
  • 是否可以在 go 插件和应用程序之间共享自定义数据类型?

    我知道可以查找导出的 go plugin 符号并将它们键入到界面 但是 我想知道是否有一种方法可以将它们键入到结构中 例如 有办法做到吗 例如 插件 go package main type Person struct Name strin
  • 如何检查Android设备是HDPI屏幕还是MDPI屏幕?

    我想检查这个以通过互联网获取不同的图像 怎么做 density getResources getDisplayMetrics density return 0 75 if it s LDPI return 1 0 if it s MDPI
  • 在android中将文件写入sdcard

    我想在 SD 卡上创建一个文件 在这里我可以创建文件并将其读 写到应用程序中 但我想要的是 文件应该保存在 SD 卡的特定文件夹中 我怎样才能做到这一点使用FileOutputStream create file public void c
  • UITableViewCell 子类布局在禁用自动布局的故事板中混乱

    我在故事板中创建了一个带有原型单元的表格视图 并且在 Xcode 5 中未选中 使用自动布局 cells是UITableViewCell的子类 主要是添加IBOutlets 里面没有任何代码 结果是布局混乱 我尝试更改自动调整大小蒙版 但没
  • 证书签名请求中手动创建的签名与 openssl req 生成的签名不匹配

    使用以下命令创建证书签名请求 openssl genrsa out test key 2048 openssl req new key test key subj CN foo out foo csr 在提供的步骤的帮助下 marc我从中提
  • 从 HTML PHP 联系表单中删除错误字符

    PHP 新手 但取得新进展 我有一个联系表单 在用户提交后会发送电子邮件 现在我想通过删除坏字符或任何可能破坏电子邮件的内容来改进此表单 该电子邮件将由我阅读 因此从技术上讲我可以浏览所有垃圾邮件 但我不想这样做 我想要一封干净的电子邮件用
  • PHP OOP:每个参数类型都有唯一的方法?

    我正在写一些自制的 ORM 学术兴趣 我试图将 TDD 概念作为一项培训练习 并且作为该练习的一部分 我在开发课程时为 API 编写文档 举个例子 我正在研究一个经典的 getCollection 类型映射器类 我希望它能够检索特定用户的资
  • 将字节数组转换为 Angular6 中的图像

    我已从服务器发送字节数组中的图像文件 现在我必须将其转换为jpeg文件并将其显示在网页中 Code app get getPhoto hash function req res console log req params hash inv
  • 将 std::string 转换为 std::chrono::duration

    我的目标是转换一张单曲string以形式 H M S to chrono duration in C 11 举个例子 为了转换 00 15 00 我想出了以下间接解决方案 我计算了两个时间点 1 00 15 00 和 2 00 00 00