Функция mktime возвращает -1 на моем компьютере, но правильный результат выполняется онлайн-компилятором

Я пытаюсь прочитать wstring, который содержит случайную дату, добавить несколько минут, а затем сравнить его с датой моего компьютера. Я попробовал тот же код на этом сайте, и он работает нормально, но когда я пытаюсь запустить в Visual Studio 2013 t1 имеет значение -1, а diff0.

Мой код:

#include <iostream>
#include <fstream>
#include <ctime>
#include <iomanip>
#include <sstream>
#include <thread>

int main()
{
    std::wstring updateTime(L"Thu Dec 14 15:06:00 2016");
    std::wstring updatePeriod(L"30");
    std::string timeUpdate(updateTime.begin(), updateTime.end());
    std::istringstream ss{ timeUpdate };
    struct tm dateUp ={};
    ss >> std::get_time(&dateUp, "%a %b %d %X %Y");

    std::time_t t1 = std::mktime(&dateUp);


    //time_t t1 = std::mktime(&dateUp);  // Contine data la care se porneste    testul
    int periodUpdate = std::stoi(updatePeriod); // Contine numarul de minute 
    std::cout <<"Data inainte de a se adauga minutele = "<< 1900 + dateUp.tm_year << " " << dateUp.tm_mon << " " << dateUp.tm_mday << " " << dateUp.tm_hour << ":" << dateUp.tm_min << "\n\n";

    // Adaug minutele la data la care se porneste testul si apoi refac structura de tip time_t (minutele se convertesc automat in ore, zile..)
    dateUp.tm_min += periodUpdate;
    t1 = std::mktime(&dateUp);
    std::cout <<"Data dupa ce s-au adaugat minutele = "<< 1900 + dateUp.tm_year << " " << dateUp.tm_mon << " " << dateUp.tm_mday << " " << dateUp.tm_hour << ":" << dateUp.tm_min << "\n\n";

    // Retin data curenta a calculatorului
    time_t now = time(NULL); 
    struct tm now_tm = *localtime(&now);
    time_t t2 = std::mktime(&now_tm);

    std::cout << "Data curenta = "<<1900 + now_tm.tm_year << " " << now_tm.tm_mon << " " << now_tm.tm_mday << " " << now_tm.tm_hour << ":" << now_tm.tm_min << "\n\n";

    //Compar cele 2 date. Pentru a se face update programat diferenta trebuie sa fie pozitiva. Adica data actuala sa fie mai mare decat data la care ar trebui sa se faca update
    double diff = difftime(t2, t1);
    std::cout << diff << "\n";
}

person Măcău Maria Giorgiana    schedule 14.12.2016    source источник
comment
Возможный дубликат Разбор строки даты/времени с помощью std: :get_time нужны разделители?   -  person    schedule 14.12.2016
comment
По-видимому, это задокументированная ошибка VC. Этого не происходит с g++, который, вероятно, использует онлайн-компилятор.   -  person    schedule 14.12.2016
comment
Грамматика, ссылка, опечатки, код   -  person urzeit    schedule 16.12.2016