std :: get_time содержит ошибку? - PullRequest
0 голосов
/ 02 ноября 2018

Я делаю проблему на сайте. Мой код следующий:

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: 45 PM, он возвращает 07: 05: 45 . Но я ожидаю 19: 05: 45 . Что не так?

UPDATE

Код неверен для оператора 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:45 PM» (g ++ 5.4.0) Это тоже неожиданно.

...