En C.
time(NULL);
En C++.
std::time(0);
Y el valor de retorno del tiempo es:time_t no mucho tiempo
La función nativa de Linux para obtener el tiempo es gettimeofday()
[también hay otros sabores], pero eso te da el tiempo en segundos y nanosegundos, que es más de lo que necesitas, así que te sugiero que sigas usando time()
. [Por supuesto, time()
se implementa llamando a gettimeofday()
en algún momento, pero no veo el beneficio de tener dos piezas de código diferentes que hagan exactamente lo mismo, y si quisieras eso, estarías usando GetSystemTime()
o algo así en Windows [no estoy seguro de que sea el nombre correcto, ha pasado un tiempo desde que programé en Windows]
Ya lo estás usando:std::time(0)
(no te olvides de #include <ctime>
). Sin embargo, si std::time
en realidad devuelve el tiempo desde que la época no se especifica en el estándar (C11, al que hace referencia el estándar C++):
7.27.2.4 El time
función
Sinopsis
#include <time.h>
time_t time(time_t *timer);
Descripción
La función de hora determina la hora actual del calendario. La codificación del valor no está especificada. [énfasis mío]
Para C++, C++11 y versiones posteriores, proporcione time_since_epoch
. Sin embargo, antes de C++20 la época de std::chrono::system_clock
no estaba especificado y, por lo tanto, posiblemente no era portátil en los estándares anteriores.
Aún así, en Linux el std::chrono::system_clock
generalmente usará Unix Time incluso en C++11, C++14 y C++17, por lo que puede usar el siguiente código:
#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();
}