如果我尝试将日期设置为a tm,std::get_time但没有任何反应,则输入流处于失败状态,这意味着已发生解析错误。
以下代码有什么问题?
{ // setting time works
std::tm t{};
std::istringstream ss("01:02:03");
ss.imbue(std::locale("de_DE"));
ss >> std::get_time(&t, "%H:%M:%S");
std::cout << ss.fail() << std::endl;
std::cout << std::put_time(&t, "%c") << '\n';
}
{ // setting day of month did not work
std::tm t{};
std::istringstream ss("2");
ss.imbue(std::locale("de_DE"));
ss >> std::get_time(&t, "%d");
std::cout << ss.fail() << std::endl;
std::cout << std::put_time(&t, "%c") << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
Sun Jan 0 01:02:03 1900
1
Sun Jan 0 00:00:00 1900
Run Code Online (Sandbox Code Playgroud)
您需要在当天传递前导零:
std::istringstream ss("02");
编辑:现在我注意到根据cppreference:
将月份中的日期解析为十进制数字(范围[01,31]),允许但不要求前导零。
也许是个错误?
编辑:错误报告在这里
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |