Question

Comment puis-je obtenir un uint le timestamp unix en C++?J'ai googlé un peu et il semble que la plupart des méthodes sont à la recherche pour plus alambiqué manières de représenter le temps.Je ne peux pas juste l'obtenir comme un uint?

Était-ce utile?

La solution

time() est le plus simple de la fonction de secondes depuis l'Epoch.Linux man ici.

Le cppreference page liée ci-dessus donne ce 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";
}

Autres conseils

#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;
}

La plus commune des conseils est mauvais, vous ne pouvez pas compter sur time().Qui est utilisé pour la chronologie relative:ISO C++ n'est pas préciser que 1970-01-01T00:00Z est time_t(0)

Ce qui est pire, c'est que vous ne pouvez pas facilement le comprendre, soit.Bien sûr, vous pouvez trouver le calendrier de la date de time_t(0) avec gmtime, mais qu'allez-vous faire si c'est 2000-01-01T00:00Z ?Combien de secondes entre 1970-01-01T00:00Z et 2000-01-01T00:00Z?C'est certainement pas un multiple de 60, en raison de 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 autre époque et les unités de temps:voir Convertir Windows Filetime à la deuxième place de Unix/Linux

Ce que std::time() retourne sur Windows est (encore) inconnu pour moi (;-))

J'ai créé un mondial de définir 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);

L'utiliser 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

Mettre ces lignes dans votre fichier d'en-tête.Je trouve cela très utile pour le débogage, etc.

Car c'est le premier résultat sur google et il n'y a pas de C++11 encore de réponse, voici comment utiliser std::chrono pour ce 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 1/1/1970, mais dans la pratique, il est très probable que ce soit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top