是否存在跨平台解决方案以获得自纪元以来的秒数,对于Windows我使用
long long NativesGetTimeInSeconds()
{
return time (NULL);
}
但是如何上Linux?
答案 0 :(得分:17)
您已经在使用它:std::time(0)
(不要忘记#include <ctime>
)。但是,std::time
是否实际返回自纪元以来的时间未在标准中指定(C11,由C ++标准引用):
7.27.2.4
time
函数概要
#include <time.h> time_t time(time_t *timer);
描述
时间函数确定当前日历时间。 未指定值的编码。 [强调我的]
C ++ 11提供time_since_epoch
,但epoch取决于使用的时钟。不过,你可以得到秒数:
#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();
}
答案 1 :(得分:13)
在C。
time(NULL);
在C ++中。
std::time(0);
时间的返回值是: time_t 而不是很长
答案 2 :(得分:2)
获取时间的原生Linux函数是gettimeofday()
[还有一些其他的风格],但是这会让你花费几秒和几秒的时间,这比你需要的多,所以我建议你继续使用time()
。 [当然,time()
是通过在某个地方调用gettimeofday()
来实现的 - 但是我没有看到让两个不同代码完全相同的好处 - 如果你想要的话,你在Windows上使用GetSystemTime()
或其他类似的东西[不确定这是正确的名字,自从我在Windows上编程以来已经有一段时间了]