Я пытаюсь преобразовать строки в переменные time_t. Вот код, который я пробовал:
#include "pch.h"
#include <ctime>
#include <iomanip>
#include <iostream>
#include <sstream>
using namespace std;
time_t String_to_timet1(string endDate) {
tm tm = { 0 };
stringstream ss(endDate);
ss >> get_time(&tm, "%Y-%m-%d %H:%M:%S");
time_t epoch = mktime(&tm);
return epoch;
}
time_t String_to_timet2(string endDate) {
tm tm = { 0 };
stringstream ss(endDate);
ss >> get_time(&tm, "%Y%m%d");
time_t epoch = mktime(&tm);
return epoch;
}
int main()
{
time_t time_certainTime1 = String_to_timet1("2019-01-01 00:00:00");
cout << time_certainTime1 << endl;
time_t time_certainTime2 = String_to_timet2("20190101");
cout << time_certainTime2 << endl;
return 0;
}
Я ожидал, что результаты будут такими же, но когда я запускаю код в Visual Studio 2017, результаты следующие:
1546268400
-1
и когда я запускаю тот же код на https://www.onlinegdb.com/online_c++_compiler, результаты:
1546300800
1546300800
Вопрос: Почему Visual Studio дает мне -1, когда она получает типизированную строку "%Y%m%d" (когда онлайн-компилятор дает мне ожидаемый результат)? Как сделать переменную time_t в таком формате?
mktime()
возвращает -1, еслиtm
не может быть представлено какtime_t
. Вы не выполняете проверку ошибок, чтобы убедиться, чтоstd::get_time()
выполнено успешно. - person Remy Lebeau   schedule 13.12.2019