为什么带有 std::chrono::system_clock 的这段代码不起作用?
Why isnt't this code with std::chrono::system_clock working?
我试图创建一个程序来告诉我明天是星期几(从 1 月 1 日开始),但我写下的代码似乎不起作用。
这是我的代码:
#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;
}
我编译代码时没有收到任何错误,但是当我 运行 我的程序时,输出是:
今天是:1 月 1 日星期四 01:00:34 1970 年
明天是:1 月 1 日星期四 01:00:34 1970
为什么会这样?
谢谢大家!
其实你的程序是正确的。你只是搞砸了输出。 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
您的变量 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?
我试图创建一个程序来告诉我明天是星期几(从 1 月 1 日开始),但我写下的代码似乎不起作用。
这是我的代码:
#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;
}
我编译代码时没有收到任何错误,但是当我 运行 我的程序时,输出是:
今天是:1 月 1 日星期四 01:00:34 1970 年 明天是:1 月 1 日星期四 01:00:34 1970
为什么会这样?
谢谢大家!
其实你的程序是正确的。你只是搞砸了输出。 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
您的变量 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?