V C.
time(NULL);
V C++.
std::time(0);
A návratová hodnota času je:time_t ne dlouhé
Nativní funkce Linuxu pro získávání času je gettimeofday()
[existují také některé další příchutě], ale tím získáte čas v sekundách a nanosekundách, což je více, než potřebujete, takže bych navrhoval, abyste i nadále používali time()
. [Samozřejmě time()
se implementuje voláním gettimeofday()
někde v řadě - ale nevidím výhodu dvou různých částí kódu, které dělají přesně to samé - a pokud byste to chtěli, použili byste GetSystemTime()
nebo něco podobného ve Windows [nejsem si jistý, že je to správný název, už to byla nějaká doba, co jsem programoval ve Windows]
Již jej používáte:std::time(0)
(nezapomeňte #include <ctime>
). Nicméně, zda std::time
ve skutečnosti vrací čas, protože epocha není specifikována ve standardu (C11, na který odkazuje standard C++):
7.27.2.4 The
time
funkceSouhrn
#include <time.h> time_t time(time_t *timer);
Popis
Časová funkce určuje aktuální kalendářní čas. Kódování hodnoty není specifikováno. [důraz můj]
Pro C++, C++11 a novější poskytněte time_since_epoch
. Nicméně před C++20 epocha std::chrono::system_clock
byl v předchozích standardech nespecifikovaný, a proto možná nepřenosný.
Přesto v Linuxu std::chrono::system_clock
bude obvykle používat Unix Time i v C++11, C++14 a C++17, takže můžete použít následující kód:
#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();
}