Почему этот код не работает с 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
Другие вопросы по тегам