std :: get_time在VS 2017中无法正常工作?

时间:2018-03-14 13:54:45

标签: c++ visual-studio-2013 visual-studio-2017 std

以下代码在使用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构建和运行时抛出异常。

1 个答案:

答案 0 :(得分:0)

它正常工作。

如果生成的错误状态标志不是std::get_time并且成员ios_base::failure被设置为针对该状态抛出,则

ios_base::iostate::goodbit抛出异常std::basic_ios::exceptions

检查iss.exceptions()返回的值,了解eofbitfailbitbadbit的设置。

这是所有流操作的常见情况,不仅适用于std::get_time