C++ C++;11个日期/时间,带小数秒

C++ C++;11个日期/时间,带小数秒,c++,c++11,datetime,C++,C++11,Datetime,有人知道一种快速、可移植的方法来解析包含小数秒的日期/时间字符串吗? 例如: 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.??"); 上面的代码片段是从post中修改的 另一篇文章展示了两次

有人知道一种快速、可移植的方法来解析包含小数秒的日期/时间字符串吗?

例如:

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.??");
上面的代码片段是从post中修改的

另一篇文章展示了两次解析年份的巧妙技巧。不幸的是,由于分数秒是我表示中的最后一个字段,它将覆盖我实际想要使用的任何有效字段

参考文档()未列出小数秒的任何转换说明符,也未列出可用于匹配和丢弃任意数字的任何说明符(与空格的
%t
%n
相同)

很明显,我完全可以放弃这部分精度。我不希望用原始字符串函数来处理它,但这似乎是我能找到的唯一选择

最后,这个字符串来自远程服务器,因此格式不受我的控制。我的环境目前是Posix,尽管我希望尽可能多的可移植性



编辑:这个问题被标记为的重复。我不认为是这样,因为我的问题是专门关于解析/丢弃没有字符说明符的令牌。这与另一篇文章不同,后者使用了,例如,
%z
解析时区(我也不感兴趣)。我的问题专门针对解析,而不是对结果值的解释。

基于上面的精彩评论,以下是如何使用:

我本可以用:

std::chrono::system_clock::time_point tp;
这会将我的输出更改为:

2017-10-23 07:23:08.780000
%T
格式化程序将输出您的
时间点
具有的任何精度,
%T
解析器将解析多达您的
时间点
所具有的小数位数


“date/date.h”
不适用于时区。严格来说,它是UTC(技术上)。如果您需要使用时区(或闰秒),则可以在
“date/date.h”的基础上添加一个附加功能

可能重复的是,a
std::tm
没有任何地方可以放置小数秒。因此,很难想象在
get\u time
推进流之后,除了自己获取最后一个值之外,还能做什么。我使用howardhinnant中的date.h-完全适合我:D额外的时间是多少(作为粗略的百分比估计,平均值)在基本STL时间函数上使用你的库?我这样问,因为这将进入API响应代码,所以性能有点令人担忧。时间增加10%不会打破平衡,但是,比方说,将解析时间加倍将是一个问题。如果你比较的是另一个解析
std::istringstream
的解决方案,那么它非常有竞争力。ThE主要费用可以是C++ I/O本身的实际使用。<代码>日期/日期。h < /C>是一个头文件库(只有一个头),所以从GITHUB下载并运行一个计时实验是非常容易的。只要点在页眉上,然后……嗯,现在我想一下,使用<代码> %f”<代码> > <代码> %%y%%-%d”。将减少几个周期,因为解析器只需解析一个命令,而不必解析3个命令。
std::chrono::system_clock::time_point tp;
2017-10-23 07:23:08.780000