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
timefunkceSouhrn
#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();
}