c++ - 为什么这段带有 std::chrono::system_clock 的代码不工作?

标签 c++ time c++-chrono

我试图创建一个程序来告诉我明天是星期几(从 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;
}

我编译代码时没有收到任何错误,但是当我运行我的程序时,输出是:

今天是:1970 年 1 月 1 日星期四 01:00:34 明天将是:1970 年 1 月 1 日星期四 01:00:34

为什么会这样?

谢谢大家!

最佳答案

其实你的程序是正确的。你只是搞砸了输出。 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

关于c++ - 为什么这段带有 std::chrono::system_clock 的代码不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35113684/

相关文章:

c++ - LLVM Clang 5.0 显式复制初始化错误

c++ - 是否可以有一个只能通过 ADL 找到的非友元函数?

docker - docker中的模拟时间(-compose)

python - 在一段时间后终止 Python 脚本

c++ - 如何将 YYYY/MM/DD HH:MM:SS 转换为 std::chrono::system_clock::time_point?

c++ - inf 输出计算线斜率

c++ - 用于 move std::shared_ptr 的函数声明

c# - 如何使用 C# 在标签上显示更新时间作为系统时间?

c++ - std::chrono - 固定时间步长循环

c++ - std::this_thread::sleep_for 时间分辨率