En C.
time(NULL);
En C++.
std::time(0);
Et la valeur de retour de time est :time_t pas longtemps
La fonction Linux native pour obtenir l'heure est gettimeofday()
[il y a aussi d'autres saveurs], mais cela vous donne le temps en secondes et en nanosecondes, ce qui est plus que ce dont vous avez besoin, donc je vous suggère de continuer à utiliser time()
. [Bien sûr, time()
est implémenté en appelant gettimeofday()
quelque part sur la ligne - mais je ne vois pas l'avantage d'avoir deux morceaux de code différents qui font exactement la même chose - et si vous le vouliez, vous utiliseriez GetSystemTime()
ou quelque chose comme ça sous Windows [pas sûr que ce soit le bon nom, ça fait un moment que je n'ai pas programmé sous Windows]
Vous l'utilisez déjà :std::time(0)
(n'oubliez pas de #include <ctime>
). Cependant, si std::time
renvoie en fait le temps depuis que l'époque n'est pas spécifiée dans le standard (C11, référencé par le standard C++) :
7.27.2.4 Le
time
fonctionSynopsis
#include <time.h> time_t time(time_t *timer);
Description
La fonction de l'heure détermine l'heure actuelle du calendrier. L'encodage de la valeur n'est pas spécifié. [c'est moi qui souligne]
Pour C++, C++11 et versions ultérieures, fournissez time_since_epoch
. Cependant, avant C++20, l'époque de std::chrono::system_clock
n'était pas spécifié et donc peut-être non portable dans les normes précédentes.
Pourtant, sous Linux, le std::chrono::system_clock
utilisera généralement Unix Time même en C++11, C++14 et C++17, vous pouvez donc utiliser le code suivant :
#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();
}