我在网站上遇到了问题。我的代码如下:
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),这也是意外的。
答案 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。