【发布时间】:2018-04-04 17:29:41
【问题描述】:
有人知道一种快速、便携的方法来解析包含小数秒的日期/时间字符串吗?
例如:
2017-10-23T07:23:08.78
到目前为止,我可以解析其他所有内容:
std::tm tm = {};
std::stringstream datestr("2017-10-23T07:23:08.78");
datestr >> std::get_time(&tm, "%Y-%m-dT%H:%M:%S.??");
上面的sn-p是从this帖子修改的。
This 其他帖子展示了两次解析年份的巧妙技巧。不幸的是,由于小数秒是我表示中的最后一个字段,它会覆盖我实际想要使用的任何有效字段。
参考文档 (here) 没有列出任何用于小数秒的转换说明符,也没有列出任何可用于匹配和丢弃任意数字的说明符(与 %t 或 %n 用于空格相同。
明确地说,我完全可以放弃这部分精度。我不希望使用原始字符串函数来操作它,但这似乎是我能找到的唯一选择。
最后,这个字符串来自远程服务器,所以格式不受我控制。我的环境目前是 Posix,但我希望尽可能多地具有可移植性。
编辑:此问题已被标记为与this 重复。我不相信这是因为我的问题是专门关于解析/丢弃没有字符说明符的令牌的。这与使用例如%z 来解析时区(我也不感兴趣)的另一篇文章不同。我的问题专门针对解析,而不是对结果值的解释。
【问题讨论】:
-
好吧,
std::tm没有任何地方可以放置小数秒。因此,除了在get_time推进流之后自己获取最后一个值之外,很难想象还有什么事情要做。 -
我使用来自 howardhinnant 的 date.h - 完全适合我 :D github.com/HowardHinnant/date/blob/master/include/date/date.h howardhinnant.github.io/date/date.html