提问者:小点点

解析“std::chrono”的时间字符串有什么问题吗?


我只想使用以下方法将时间字符串解析为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)。

注意,我使用的是Howard Hinnant的日期库。


共1个答案

匿名用户

parse函数的设计是,如果您没有为要解析的类型解析足够的信息,则在流上设置failbitparse认为{h,m,s}信息不足以唯一确定时间的瞬间(system_clock::time_point),因此此分析失败。

您可以通过解析为持续时间来实现此操作:

#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);
}

在本例中,tp_time的值为63245s。