Почему этот код не работает с std::chrono::system_clock?
Я пытался создать программу, которая сообщала бы мне, какой день завтра (начиная с 01 января), но записанный мною код, похоже, не работает.
Это мой код:
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>
int main (int argc, char** argv) {
std::chrono::system_clock::time_point today = std::chrono::system_clock::now();
std::tm timeinfo = std::tm();
timeinfo.tm_mon = 0;
timeinfo.tm_mday = 1;
std::time_t tt = std::mktime (&timeinfo);
std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t (tt);
std::chrono::duration<int,std::ratio<60*60*24> >one_day (1);
std::chrono::system_clock::time_point tomorrow = today + one_day;
std::time_t tv;
tt = std::chrono::system_clock::to_time_t ( today );
std::cout << "today is: " << ctime(&tv);
tt = std::chrono::system_clock::to_time_t ( tomorrow );
std::cout << "tomorrow will be: " << ctime(&tv);
return 0;
}
Я не получаю никаких ошибок при компиляции своего кода, но когда я запускаю свою программу, вывод:
сегодня: четверг 01 января 01:00:34 1970 завтра будет четверг 01 января 01:00:34 1970
Почему так?
Спасибо всем!
2 ответа
Ваша переменная tv
неинициализирован!
Смотрите мои комментарии, комментирующие ваш исходный код:
std::time_t tv; // uninitialized
tt = std::chrono::system_clock::to_time_t(today);
std::cout << "today is: " << ctime(&tv); // did you mean tt?
tt = std::chrono::system_clock::to_time_t(tomorrow);
std::cout << "tomorrow will be: " << ctime(&tv); // did you mean tt?
На самом деле ваша программа верна. Вы просто испортили вывод. Переменные, используемые в ctime
ссылаются на (неинициализированную) переменную tv
вместо переменной tt
который содержит значения, которые вы вычисляете из today
а также tomorrow
,
tt = std::chrono::system_clock::to_time_t ( today );
std::cout << "today is: " << ctime(&tv);
tt = std::chrono::system_clock::to_time_t ( tomorrow );
std::cout << "tomorrow will be: " << ctime(&tv);
Должно быть
tt = std::chrono::system_clock::to_time_t ( today );
std::cout << "today is: " << ctime(&tt);
tt = std::chrono::system_clock::to_time_t ( tomorrow );
std::cout << "tomorrow will be: " << ctime(&tt);
вместо. После исправления это работает для меня. Теперь я получаю этот вывод:
today is: Sun Jan 31 13:22:30 2016
tomorrow will be: Mon Feb 1 13:22:30 2016