簡體   English   中英

std::get_time 有錯誤嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM