这个时间字符串在 'std::chrono' 中解析有什么问题?

3

我只是想使用以下方法将时间字符串解析为chrono::system_clock::time_point:

#include <iosfwd>
#include "date/date.h"

std::stringstream ssTime;
ssTime << "17:34:05";
std::chrono::system_clock::time_point tp_time;
ssTime >> date::parse("%H:%M:%S", tp_time);

我原本期望得到指定时间点自EPOCH以来的time_point,但实际上我得到了0(即EPOCH)。
请注意,我正在使用date,该库由Howard Hinnant开发。
1个回答

4
parse函数的设计是,如果对于正在解析的类型,解析的信息不足,则会在流上设置failbitparse认为{h,m,s}信息不足以唯一确定一个时间点(即system_clock::time_point),因此此解析失败。

您可以通过将其解析为seconds持续时间来使其正常工作:

#include "date/date.h"
#include <sstream>

int
main()
{
    std::stringstream ssTime;
    ssTime << "17:34:05";
    std::chrono::seconds tp_time;
    ssTime >> date::parse("%H:%M:%S", tp_time);
}
< p > 在这个示例中,tp_time 的值为 63245 秒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接