c++ - std::get_time 有错误吗?

标签 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:45PM 时,它返回 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;
}

代码返回 "Parse failed" for "07:05:45PM" (g++ 5.4.0) 这也是出乎意料的。

最佳答案

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

大胆强调是我的。

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

Created attachment 38616 [details] Short program demonstrating lack of %r support in std::time_get

The "%r" and "%p" formats don't seem to be supported yet for time_get, even though they are both supported by time_put. The %p is supposed to be the locale's version of "AM" and "PM" (if any) and %r is equivalent to %I:%M:%S %p in the POSIX locale.

最后一条评论是这样说的:

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

GCC 11.1 has been released, retargeting bugs to GCC 11.2.

关于c++ - std::get_time 有错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110175/

相关文章:

c++ - C++读取二进制文件的方法

c++ - 基本 C++ : How do I initialize a struct member of a class?

c++ - 不使用重新定义的符号时避免多定义链接器错误

c++ - 控制台上的不同输出打印标准输出/重定向到文件

c++ - 运行时错误 : load of value 127, 这不是类型 'bool' 的有效值

C++ 将所有文件从一个目录移动到另一个目录

c++ - 将 QTableWidget 单元格内容复制到剪贴板

c++ - C++中通过递归查找目录和子目录

c++ - 如何使用辅助函数在 C++ 中编译以下 flex 文件

c++ - 具有三个参数的typedef是什么意思?