【问题标题】:What is wrong with parsing this time string for 'std::chrono'?为“std::chrono”解析这个时间字符串有什么问题?
【发布时间】:2021-04-30 14:27:29
【问题描述】:

我只是想将时间字符串解析为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 libraryHoward Hinnant

【问题讨论】:

    标签: c++ parsing chrono


    【解决方案1】:

    parse 函数的设计是如果你没有为被解析的类型解析足够的信息,failbit 被设置在流上。 parse 认为 {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。

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多