以下代码在使用VS 2017构建和运行时不会引发异常。请注意日期中的月份无效。
#include <sstream>
#include <iomanip>
#include <cctype>
#include <iostream>
int main()
{
std::string invalidMonth = "2013-13-02T19:58:55Z";
std::tm datetime = {};
std::istringstream iss(invalidMonth);
iss >> std::get_time(&datetime, "%Y-%m-%dT%H:%M:%S");
if (iss.fail())
{
std::ostringstream oss;
oss << "Invalid value '" << invalidMonth << "'\n";
throw std::runtime_error(oss.str());
}
else
{
std::cout << "No error\n";
}
return 0;
}
解析后datetime
的值为:
tm_sec 55 int
tm_min 58 int
tm_hour 19 int
tm_mday 2 int
tm_mon 0 int
tm_year 113 int
tm_wday 0 int
tm_yday 0 int
tm_isdst 0 int
此代码在使用VS 2013构建和运行时抛出异常。
答案 0 :(得分:0)
它正常工作。
如果生成的错误状态标志不是std::get_time
并且成员ios_base::failure
被设置为针对该状态抛出,则 ios_base::iostate::goodbit
抛出异常std::basic_ios::exceptions
。
检查iss.exceptions()
返回的值,了解eofbit
,failbit
和badbit
的设置。
这是所有流操作的常见情况,不仅适用于std::get_time
。