15

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

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

但是如何上 Linux 呢?

4

4 回答 4

27

你已经在使用它了:(std::time(0)别忘了#include <ctime>)。但是,std::time标准中未指定是否实际返回自纪元以来的时间(C11,由 C++ 标准引用):

7.27.2.4time功能

概要

#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();
}
于 2012-12-25T18:02:58.977 回答
15

在 C.

time(NULL);

在 C++ 中。

std::time(0);

而时间的返回值为:time_t not long long

于 2012-12-25T18:27:17.193 回答
2

获取时间的原生 Linux 函数是gettimeofday()[还有一些其他的风格],但它以秒和纳秒为单位获取时间,这超出了你的需要,所以我建议你继续使用time(). [当然,time()是通过调用gettimeofday()某个地方来实现的——但我看不出有两段不同的代码做同样的事情的好处——如果你想要的话,你会使用GetSystemTime()或类似的东西Windows [不确定这是正确的名称,我已经有一段时间没有在 Windows 上编程了]

于 2012-12-25T18:12:46.760 回答
1

简单、便携和适当的方法

#include <ctime>

long CurrentTimeInSeconds()
{
     return (long)std::time(0); //Returns UTC in Seconds
}
于 2022-01-22T22:39:10.293 回答