Gibt es eine plattformübergreifende Möglichkeit, das aktuelle Datum und die aktuelle Uhrzeit in C ++ abzurufen?
c++
date
time
cross-platform
Max Frai
quelle
quelle
tm
Struktur verwende. Gibt der C ++ 11-Ansatz nicht nur den Unix-Zeitstempel (Zeit seit Epoche) an, obwohl die Frage nach Datum und Uhrzeit lautete?Antworten:
In C ++ 11 können Sie verwenden
std::chrono::system_clock::now()
Beispiel (kopiert von en.cppreference.com ):
Dies sollte ungefähr so drucken:
quelle
string
ausstream
, oder wie man richtig eine zu formatierentime_point<>
, gehen Sie vor und stellen eine andere Frage oder google nach.C ++ teilt seine Datums- / Zeitfunktionen mit C. Die tm-Struktur ist wahrscheinlich die einfachste, mit der ein C ++ - Programmierer arbeiten kann - die folgenden Drucke geben das heutige Datum wieder:
quelle
ctime()
diese Antwort zusammen mit dieser Antwort, wenn Sie eine Datumszeichenfolge wünschen.struct tm
ist es möglich, einfach delete darauf aufzurufen?delete
(c ++ Schlüsselwort) verwenden soll, ich dachte nur, es sollte irgendwie gelöscht werden :) oder wer wird das für Sie tun?Sie können den folgenden plattformübergreifenden Code ausprobieren, um das aktuelle Datum und die aktuelle Uhrzeit abzurufen:
Ausgabe:
Bitte besuchen Sie hier für weitere Informationen zum Datums- / Zeitformat
quelle
const
Wert zurückgeben? Das ist zwecklos.Standard-C-Bibliotheken bieten
time()
. Dies ist Sekunden ab der Epoche und kannH:M:S
mit Standard-C-Funktionen auf Datum konvertiert werden. Boost hat auch eine Zeit- / Datumsbibliothek , die Sie überprüfen können.quelle
Die C ++ - Standardbibliothek bietet keinen richtigen Datumstyp. C ++ erbt die Strukturen und Funktionen für die Datums- und Uhrzeitmanipulation von C zusammen mit einigen Datums- / Zeit-Eingabe- und Ausgabefunktionen, die die Lokalisierung berücksichtigen.
quelle
Neue Antwort auf eine alte Frage:
Die Frage gibt nicht an, in welcher Zeitzone. Es gibt zwei vernünftige Möglichkeiten:
Für 1 können Sie diese Datumsbibliothek und das folgende Programm verwenden:
Was gerade für mich ausgegeben hat:
Die Datumsbibliothek fügt im Wesentlichen nur einen Streaming-Operator für hinzu
std::chrono::system_clock::time_point
. Es fügt auch viele andere nette Funktionen hinzu, die jedoch in diesem einfachen Programm nicht verwendet werden.Wenn Sie es vorziehen 2 (die Ortszeit), gibt es eine Zeitzone - Bibliothek , die auf dem aufbaut Datum Bibliothek . Beide Bibliotheken sind Open Source und plattformübergreifend , vorausgesetzt, der Compiler unterstützt C ++ 11 oder C ++ 14.
Was für mich gerade ausgegeben:
Der Ergebnistyp von
make_zoned
ist a,date::zoned_time
was eine Paarung von adate::time_zone
und a iststd::chrono::system_clock::time_point
. Dieses Paar stellt eine Ortszeit dar, kann aber auch UTC darstellen, je nachdem, wie Sie es abfragen.Mit der obigen Ausgabe können Sie sehen, dass sich mein Computer derzeit in einer Zeitzone mit einem UTC-Offset von -4h und einer Abkürzung für EDT befindet.
Wenn eine andere Zeitzone gewünscht wird, kann dies auch erreicht werden. Um beispielsweise die aktuelle Zeit in Sydney, Australien, zu ermitteln, ändern Sie einfach die Konstruktion der Variablen
local
in:Und die Ausgabe ändert sich zu:
Update für C ++ 20
Diese Bibliothek ist jetzt weitgehend für C ++ 20 übernommen. Der Namespace
date
ist weg und alles iststd::chrono
jetzt im Namespace . Undzoned_time
anstelle von verwendenmake_time
. Löschen Sie die Header"date.h"
und"tz.h"
und verwenden Sie einfach<chrono>
.Während ich dies schreibe, tauchen auf einigen Plattformen gerade erst Teilimplementierungen auf.
quelle
localtime
mir nicht die Zeit in meiner Zeitzone geben?localtime
wird fast immer gibt Ihnen die Zeit in Ihrer lokalen Zeitzone zu sekundengenau. Manchmal schlägt es aufgrund von Threadsicherheitsproblemen fehl, und es funktioniert nie mit einer Genauigkeit von weniger als einer Sekunde.(Für andere Googler)
Es gibt auch Boost :: date_time :
quelle
Rufen Sie die aktuelle Uhrzeit entweder mit
std::time()
oderstd::chrono::system_clock::now()
(oder einem anderen Uhrentyp ) ab.std::put_time()
(C ++ 11) undstrftime()
(C) bieten viele Formatierer, um diese Zeiten auszugeben.Die Reihenfolge der Formatierer ist wichtig:
Die Formatierer von
strftime()
sind ähnlich:Oft bedeutet der Großbuchstabe "Vollversion" und Kleinbuchstaben Abkürzung (z. B. Y: 2017, y: 17).
Gebietsschemaeinstellungen ändern die Ausgabe:
Mögliche Ausgabe ( Coliru , Compiler Explorer ):
Ich habe
std::gmtime()
für die Konvertierung nach UTC verwendet.std::localtime()
wird zur Umrechnung in Ortszeit bereitgestellt.Beachten Sie, dass
asctime()
/ctime()
die in anderen Antworten erwähnt wurden, jetzt als veraltet markiert sind undstrftime()
bevorzugt werden sollten.quelle
quelle
Ja, und Sie können dies mit Formatierungsregeln tun, die vom aktuell durchdrungenen Gebietsschema angegeben werden:
quelle
ostream::sentry
oft).Sie könnten die Zeitklasse C ++ 11 verwenden:
Ausgabe:
quelle
Es gibt immer das
__TIMESTAMP__
Präprozessor-Makro.Beispiel: So 13. April 11:28:08 2014
quelle
__TIMESTAMP__
ist ein Präprozessor-Makro, das in der Form TTT Mmm Datum hh :: mm :: ss yyyy auf die aktuelle Zeit (zur Kompilierungszeit) erweitert wird. Das__TIMESTAMP__
Makro kann verwendet werden, um Informationen über den bestimmten Zeitpunkt bereitzustellen, zu dem eine Binärdatei erstellt wurde. Siehe: cprogramming.com/reference/preprocessor/__TIMESTAMP__.htmlSie können auch direkt verwenden
ctime()
:quelle
#define _CRT_SECURE_NO_DEPRECATE
vor include hinzufügen , um Programmkompilierungen zu machenIch fand diesen Link ziemlich nützlich für meine Implementierung: C ++ Datum und Uhrzeit
Hier ist der Code, den ich in meiner Implementierung verwende, um ein klares Ausgabeformat "JJJJMMTT HHMMSS" zu erhalten. Der Parameter dient zum Umschalten zwischen UTC und Ortszeit. Sie können meinen Code ganz einfach an Ihre Bedürfnisse anpassen.
Ausgabe (UTC, EST):
quelle
ptmNow->tm_day < 9
und nicht<10
?<=9
dass Sie auch 91+
im Code. Tag / Monat beginnt um 0.Dies funktioniert mit G ++ Ich bin nicht sicher, ob dies Ihnen hilft. Programmausgabe:
Code:
quelle
Dies wurde für mich unter Linux (RHEL) und Windows (x64) für g ++ und OpenMP kompiliert:
quelle
Sie können die folgenden Befehle verwenden Code das bekommen aktuelle Systemdatum und Zeit in C ++ :
PS: Besuchen Sie diese Website für weitere Informationen.
quelle
Die ffead-cpp bietet mehrere Dienstprogrammklassen für verschiedene Aufgaben. Eine solche Klasse ist die Date- Klasse, die viele Funktionen von Datumsoperationen bis zur Datumsarithmetik bietet. Außerdem gibt es eine Timer- Klasse für Timing-Operationen. Sie können sich das auch ansehen.
quelle
http://www.cplusplus.com/reference/ctime/strftime/
Dieser eingebaute scheint eine vernünftige Reihe von Optionen zu bieten.
quelle
time_t rawTime; time(&rawTime); struct tm *timeInfo; char buf[80]; timeInfo = localtime(&rawTime); strftime(buf, 80, "%T", timeInfo);
diesem speziellen Fall wird nur das HH: MM: SS angegeben. Mein erster Beitrag, daher bin ich mir nicht sicher, wie ich das Codeformat richtig machen soll. Das tut mir leid.localtime_s () Version:
quelle
quelle
quelle
void main
nicht einmal Standard-C / C ++.Sie könnten verwenden
boost
:quelle