对于我使用的 Windows,是否有跨平台解决方案可以获得自纪元以来的秒数
long long NativesGetTimeInSeconds()
{
return time (NULL);
}
但是如何上 Linux 呢?
你已经在使用它了:(std::time(0)
别忘了#include <ctime>
)。但是,std::time
标准中未指定是否实际返回自纪元以来的时间(C11,由 C++ 标准引用):
7.27.2.4
time
功能概要
#include <time.h> time_t time(time_t *timer);
描述
time 函数确定当前的日历时间。 该值的编码未指定。[强调我的]
对于 C++,C++11 及更高版本提供time_since_epoch
. 然而,在 C++20 之前,时代std::chrono::system_clock
是未指定的,因此在以前的标准中可能是不可移植的。
尽管如此,在 Linux 上,std::chrono::system_clock
即使在 C++11、C++14 和 C++17 中,通常也会使用 Unix Time,因此您可以使用以下代码:
#include <chrono>
// make the decltype slightly easier to the eye
using seconds_t = std::chrono::seconds;
// return the same type as seconds.count() below does.
// note: C++14 makes this a lot easier.
decltype(seconds_t().count()) get_seconds_since_epoch()
{
// get the current time
const auto now = std::chrono::system_clock::now();
// transform the time into a duration since the epoch
const auto epoch = now.time_since_epoch();
// cast the duration into seconds
const auto seconds = std::chrono::duration_cast<std::chrono::seconds>(epoch);
// return the number of seconds
return seconds.count();
}
在 C.
time(NULL);
在 C++ 中。
std::time(0);
而时间的返回值为:time_t not long long
获取时间的原生 Linux 函数是gettimeofday()
[还有一些其他的风格],但它以秒和纳秒为单位获取时间,这超出了你的需要,所以我建议你继续使用time()
. [当然,time()
是通过调用gettimeofday()
某个地方来实现的——但我看不出有两段不同的代码做同样的事情的好处——如果你想要的话,你会使用GetSystemTime()
或类似的东西Windows [不确定这是正确的名称,我已经有一段时间没有在 Windows 上编程了]
简单、便携和适当的方法
#include <ctime>
long CurrentTimeInSeconds()
{
return (long)std::time(0); //Returns UTC in Seconds
}