it-swarm.com.de

Holen Sie sich den Unix-Zeitstempel mit C ++

Wie erhalte ich in C++ einen uint -Unix-Zeitstempel? Ich habe ein bisschen gegoogelt und es scheint, dass die meisten Methoden nach verschlungeneren Wegen suchen, um die Zeit darzustellen. Kann ich es nicht einfach als uint bekommen?

54
2rs2ts

time() ist die einfachste Funktion - Sekunden seit Epoche. Linux-Manpage hier .

Die oben verlinkte cppreference-Seite gibt dies Beispiel :

#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";
}
61
Tony Delroy
#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;
}
35
wilhelmtell

Die häufigsten Ratschläge sind falsch, Sie können sich nicht nur auf time() verlassen. Dies wird für das relative Timing verwendet: ISO C++ gibt nicht an, dass 1970-01-01T00:00Ztime_t(0) ist.

Was noch schlimmer ist, ist, dass Sie es auch nicht leicht herausfinden können. Sicher, Sie können das Kalenderdatum von time_t(0) mit gmtime finden, aber was werden Sie tun, wenn dies 2000-01-01T00:00Z Ist? Wie viele Sekunden lagen zwischen 1970-01-01T00:00Z Und 2000-01-01T00:00Z? Es ist sicher kein Vielfaches von 60, aufgrund von Schaltsekunden.

15
MSalters
#include <iostream>
#include <sys/time.h>

using namespace std;

int main ()
{
  unsigned long int sec= time(NULL);
  cout<<sec<<endl;
}
5
anijhaw

Windows verwendet eine andere Epoche und eine andere Zeiteinheit: siehe Windows-Filetime in Unix/Linux in Sekunde konvertieren

Was std :: time () unter Windows zurückgibt, ist mir (noch) nicht bekannt (;-))

4
davecb

Ich habe eine globale Definition mit weiteren Informationen erstellt:

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

Benutze es so:

INFO << "Hello world" << std::endl;
ERROR << "Goodbye world" << std::endl;

Beispielausgabe:

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

Fügen Sie diese Zeilen in Ihre Header-Datei ein. Ich finde das sehr nützlich zum Debuggen, etc.

2
xinthose

Da dies das erste Ergebnis auf Google ist und noch keine C++ 11-Antwort vorliegt, verwenden Sie dazu std :: chrono:

    #include <chrono>

    ...

    using namespace std::chrono;
    int64_t timestamp = duration_cast<milliseconds>(system_clock::now().time_since_Epoch()).count();

Beachten Sie, dass diese Antwort nicht garantiert, dass die Epoche 01.01.1970 ist, aber in der Praxis ist es sehr wahrscheinlich.

1
Tharwen