我想解析日期字符串與std::get_time()
,但它似乎代碼在VC++ 2015工作,但不工作在gcc 6.3和鐺4.0。這裏是MCVE:std :: get_time()在gcc 6.3和鏗鏘4.0不適用於完整的月份名稱
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
int main() {
std::string line = "February 4 1993 15:21";
std::tm date_1 = {};
std::stringstream ss(line);
ss >> std::get_time(&date_1, "%b %d %Y %H:%M");
if(ss.fail())
{
std::cout << "parse failed\n";
}
std::cout << date_1.tm_year << "\n";
std::cout << date_1.tm_mon << "\n";
std::cout << date_1.tm_mday << "\n";
std::cout << date_1.tm_hour << "\n";
std::cout << date_1.tm_min << "\n";
return 0;
}
下面是VC++ 2015年的結果:
93
1
4
15
21
下面是GCC 6.3.2和4.0鏗鏘(我用的ideone.com和Coliru編譯器)的結果 - 既沒有C++ 14米的標誌:
parse failed
0
1
0
0
0
它的工作,當我使用月份的縮寫,如二月,八月等
我試過在stringstream
(en_US
,en_GB
+ UTF-8版本)上設置不同的語言環境,但它們沒有任何區別或導致運行時錯誤。我試過改變分隔符,但也沒有區別。
我在CPP Reference閱讀%B在std::get_time()
:
解析月份名稱,要麼全或縮寫,例如十月
這是一個bug在GCC和鐺或者編譯器,相反,什麼是上面寫的,免費辦理只縮寫名稱取決於執行/缺少的功能?標準對此有何評論?這兩個編譯器在這裏表現出相同的行爲是巧合嗎?
libstdC++的錯誤。 [與clang -stdlib = libC++一起使用。](http://coliru.stacked-crooked.com/a/3108a8e1c8921d9a) – cpplearner
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78714 – cpplearner
謝謝。如果您將它作爲答案發布,我會接受它。 – KjMag