为“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);

我希望在 time_point 之后获得指定时间的 EPOCH,但我得到的是 0(即 EPOCH)。

请注意,我使用的是 date libraryHoward Hinnant

解决方法

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

tp_time 在本例中的值为 63245s。