In C.
time(NULL);
In C++.
std::time(0);
E il valore di ritorno di time è :time_t non lungo molto
La funzione nativa di Linux per ottenere l'ora è gettimeofday()
[ci sono anche altri gusti], ma questo ti dà il tempo in secondi e nanosecondi, che è più di quanto ti serve, quindi ti suggerirei di continuare a usare time()
. [Certo, time()
è implementato chiamando gettimeofday()
da qualche parte lungo la linea - ma non vedo il vantaggio di avere due diversi pezzi di codice che fanno esattamente la stessa cosa - e se lo volessi, useresti GetSystemTime()
o qualcosa del genere su Windows [non sono sicuro che sia il nome giusto, è passato un po' di tempo dall'ultima volta che ho programmato su Windows]
Lo stai già utilizzando:std::time(0)
(non dimenticare di #include <ctime>
). Tuttavia, se std::time
in realtà restituisce il tempo da quando epoch non è specificato nello standard (C11, a cui fa riferimento lo standard C++):
7.27.2.4 L'
time
funzioneSinossi
#include <time.h> time_t time(time_t *timer);
Descrizione
La funzione dell'ora determina l'ora corrente del calendario. La codifica del valore non è specificata. [sottolineatura mia]
Per C++, C++11 e versioni successive forniscono time_since_epoch
. Tuttavia, prima del C++20 l'epoca di std::chrono::system_clock
non era specificato e quindi probabilmente non portabile negli standard precedenti.
Tuttavia, su Linux il std::chrono::system_clock
userà solitamente Unix Time anche in C++11, C++14 e C++17, quindi puoi usare il seguente codice:
#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();
}