std :: get_time是否有错误?

时间:2018-11-01 22:19:42

标签: c++ g++

我在网站上遇到了问题。我的代码如下:

string timeConversion(string s) {
    std::tm t = {};
    string result = "";
    std::istringstream ss(s);

    ss >> std::get_time(&t, "%I:%M:%S%p");
    if (ss.fail()) {
        std::ostringstream oss;
        oss << std::put_time(&t, "%H:%M:%S")  << endl;
        result = oss.str();
    } else {
        result = "Parse failed";
    }

    return result;
}

当我输入 07:05:45 PM 时,它将返回 07:05:45 。但我希望 19:05:45 。怎么了?

更新

“ if”语句的代码错误。必须是

string timeConversion(string s) {
    std::tm t = {};
    string result = "";
    std::istringstream ss(s);

    ss >> std::get_time(&t, "%I:%M:%S%p");
    if (ss.fail()) {
        result = "Parse failed";
    } else {
        std::ostringstream oss;
        oss << std::put_time(&t, "%H:%M:%S")  << endl;
        result = oss.str();
    }

    return result;
}

代码返回“ 07:05:45 PM” “解析失败” (g ++ 5.4.0),这也是意外的。

1 个答案:

答案 0 :(得分:2)

这是gcc中的一个错误https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71367

大胆的强调是我的。

<块引用>

Ed Beroset 2016-05-31 21:17:27 UTC

已创建附件 38616 [详情] 显示在 std::time_get

中缺乏 %r 支持的简短程序

time_get 似乎还不支持“%r”和“%p”格式,尽管 time_put 支持它们。 %p 应该是“AM”和“PM”(如果有)的语言环境版本,而 %r 相当于 POSIX 语言环境中的 %I:%M:%S %p。

最后一条评论说:

<块引用>

Jakub Jelinek 2021-04-27 11:37:54 UTC

GCC 11.1 已发布,将错误重新定位到 GCC 11.2。