我正在解决一个网站上的问题。我的代码如下:
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;
}
代码为“07:05:45PM”返回“Parse failed”(g++ 5.4.0)这也出乎意料。
这是 gcc https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71367 中的一个错误
大胆的强调是我的。
埃德·贝罗塞特 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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句