[英]does std::get_time have a bug?
我正在解決一個網站上的問題。 我的代碼如下:
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.