#include <ctime>
#include <iostream>
int main()
{
std::time_t result = std::time(nullptr);
std::cout << std::asctime(std::localtime(&result))
<< result << " seconds since the Epoch\n";
}
#include<iostream>
#include<ctime>
int main()
{
std::time_t t = std::time(0); // t is an integer type
std::cout << t << " seconds since 01-Jan-1970\n";
return 0;
}
7条答案
按热度按时间e5njpo681#
C++20引入了
time_since_epoch
相对于UNIX epoch的保证,cppreference.com给出了一个例子,我已经提取了相关代码,并将单位改为秒而不是小时:使用C++17或更早版本时,
time()
是最简单的函数--自Epoch以来的秒,对于Linux和UNIX来说,至少是UNIX epoch。上面链接的cppreference页面给出了这个example:
gcuhipw92#
s5a0g9ez3#
最常见的建议是错误的,你不能只依赖
time()
。它用于相对计时:ISO C++没有指定1970-01-01T00:00Z
是time_t(0)
更糟糕的是,你也不容易找到它。当然,你可以用
gmtime
找到time_t(0)
的日历日期,但是如果那是2000-01-01T00:00Z
,你该怎么办?1970-01-01T00:00Z
和2000-01-01T00:00Z
之间有多少秒?由于闰秒,它肯定不是60的倍数。bz4sfanl4#
由于这是google上的第一个结果,并且还没有C++20的答案,下面是如何使用std::chrono来做到这一点:
在C20之前的版本中,system_clock的epoch是Unix epoch是一个事实上的约定,但它不是标准化的。如果你不是在C20上,请自担风险。
ovfsdjhp5#
ktecyv1j6#
我创建了一个包含更多信息的全局定义:
像这样使用它:
样本输出:
把这些行放在你的头文件中。我发现这对调试等非常有用。
6vl6ewon7#
Windows使用不同的纪元和时间单位:参见Convert Windows Filetime to second in Unix/Linux
在Windows上,std::time()返回的是什么(到目前为止)我还不知道(;- ))