Comment obtenir un horodatage uint
unix en C++? J'ai un peu cherché sur Google et il semble que la plupart des méthodes recherchent des manières plus compliquées de représenter le temps. Je ne peux pas simplement l'obtenir en tant que uint
?
time()
est la fonction la plus simple - secondes depuis Epoch. Page de manuel Linux ici .
La page cppreference liée ci-dessus donne ceci exemple :
#include <ctime>
#include <iostream>
int main()
{
std::time_t result = std::time(nullptr);
std::cout << std::asctime(std::localtime(&result))
<< result << " seconds since the Epoch\n";
}
#include<iostream>
#include<ctime>
int main()
{
std::time_t t = std::time(0); // t is an integer type
std::cout << t << " seconds since 01-Jan-1970\n";
return 0;
}
Le conseil le plus courant est faux, vous ne pouvez pas simplement compter sur time()
. C'est utilisé pour le timing relatif: ISO C++ ne spécifie pas que 1970-01-01T00:00Z
Est time_t(0)
Le pire, c'est que vous ne pouvez pas le comprendre facilement non plus. Bien sûr, vous pouvez trouver la date du calendrier de time_t(0)
avec gmtime
, mais qu'allez-vous faire si c'est 2000-01-01T00:00Z
? Combien de secondes y at-il entre 1970-01-01T00:00Z
Et 2000-01-01T00:00Z
? Ce n'est certainement pas un multiple de 60, à cause des secondes intercalaires.
#include <iostream>
#include <sys/time.h>
using namespace std;
int main ()
{
unsigned long int sec= time(NULL);
cout<<sec<<endl;
}
Windows utilise une époque et une unité de temps différentes: voir Convertir Windows Filetime en seconde sous Unix/Linux
Ce que std :: time () renvoie sous Windows m'est (encore) inconnu (;-))
J'ai créé une définition globale avec plus d'informations:
#include <iostream>
#include <ctime>
#include <iomanip>
#define INFO std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [INFO] " << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
#define ERROR std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [ERROR] " << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
static std::time_t time_now = std::time(nullptr);
Utilisez-le comme ceci:
INFO << "Hello world" << std::endl;
ERROR << "Goodbye world" << std::endl;
Exemple de sortie:
16-06-23 21:33:19 [INFO] src/main.cpp(main:6) >> Hello world
16-06-23 21:33:19 [ERROR] src/main.cpp(main:7) >> Goodbye world
Mettez ces lignes dans votre fichier d'en-tête. Je trouve cela très utile pour le débogage, etc.
Comme il s'agit du premier résultat sur Google et qu'il n'y a pas encore de réponse C++ 11, voici comment utiliser std :: chrono pour le faire:
#include <chrono>
...
using namespace std::chrono;
int64_t timestamp = duration_cast<milliseconds>(system_clock::now().time_since_Epoch()).count();
Notez que cette réponse ne garantit pas que l’époque est le 1/1/1970, mais dans la pratique, c’est très probable.