在Linux中获得自纪元以来的秒数

时间:2012-12-25 18:01:01

标签: c++ linux windows time

是否存在跨平台解决方案以获得自纪元以来的秒数,对于Windows我使用

long long NativesGetTimeInSeconds()
{
    return time (NULL);
}

但是如何上Linux?

3 个答案:

答案 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上编程以来已经有一段时间了]